1. SpringMVC框架处理JSON数据
(1) JSON数据的传输处理 SpringMVC 提供了对 JSON 数据的良好支持,可以通过 @ResponseBody
注解将对象自动转换为 JSON 响应。在控制器方法中,使用 @ResponseBody
或 ResponseEntity
返回对象即可自动转换为 JSON 格式
@RequestMapping("/getJson")
@ResponseBody
public User getJson() {
User user = new User();
user.setName("张三");
user.setAge(25);
return user;
}
(2) JSON数据传递过程中的中文乱码和日期问题 在 JSON 数据传输中,可能会遇到中文乱码和日期格式化问题。为了解决中文乱码问题,可以在 SpringMVC 配置文件中添加字符编码过滤器:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
日期格式化问题可以通过配置 MappingJackson2HttpMessageConverter
来解决:
@Bean
public MappingJackson2HttpMessageConverter jacksonMessageConverter() {
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
mapper.setDateFormat(sdf);
messageConverter.setObjectMapper(mapper);
return messageConverter;
}
也可以通过配置自定义的ConversionService来解决:
<!-- 配置自定义的ConversionService-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters" >
<list>
<bean class="cn.cvs.converter.String2DateConverter">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
</bean>
</list>
</property>
</bean>
(3) 多视图解析器 在 SpringMVC 中,可以配置多个视图解析器来处理不同类型的视图
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<property name="contentType" value="application/json" />
</bean>
2. SpringMVC框架中的数据格式转换
(1) SpringMVC框架数据转换流程 SpringMVC 提供了 ConversionService
接口来处理数据类型转换。在请求参数绑定时,SpringMVC 会使用 ConversionService
将请求参数转换为目标类型
(2) 编写自定义转换器 可以通过实现 Converter
接口来编写自定义转换器,例如将字符串转换为日期:
public class StringToDateConverter implements Converter<String, Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date convert(String source) {
try {
return dateFormat.parse(source);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid date format. Please use yyyy-MM-dd");
}
}
}
然后在 Spring 配置文件中注册这个转换器:
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.example.converter.StringToDateConverter" />
</set>
</property>
</bean>
(3) 使用@InitBinder装配自定义编辑器 通过 @InitBinder
注解可以装配自定义的属性编辑器,例如:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
}
在控制器方法中,SpringMVC 会自动使用 WebDataBinder
进行参数绑定和类型转换:
@RequestMapping("/submitDate")
public String submitDate(@RequestParam("date") Date date) {
// 使用转换后的 Date 对象进行业务处理
return "success";
}
使用以上扩展和整合,可以更好地处理 JSON 数据传输、数据格式转换等问题,提升 SpringMVC 框架的扩展性、灵活性及实用性