Spring MVC--JSON数据传递中文乱码、日期格式显示错误问题
控制器的处理方法使用@ResponseBody注解向前台页面以JSON格式进行数据传递的时候,若返回值是中文字符串,则会出现中文乱码,原因是消息转换器中StringHttpMessageConverter中固定了转换字符编码,则“ISO-8859-1”。
一、JSON数据传递中文乱码问题
常用的两种解决方法
1、在控制器处理方法上的@RequestMapping注解中配置produces
@RequestMapping(value="/view",method=RequestMethod.GET, produces={"application/json;charset=UTF-8"}) @ResponseBody public Object view(@RequestParam String id){ //省略处理请求内容 return obj; }
注:
-
produces:指定返回的内容类型。
-
produces={"application/json;charset=UTF-8"}
:
表示该处理方法将产生JSON格式的数据,此时会根据请求报文头中的Accept进行匹配,若请求报文头"Accept:application/json"
时即可匹配,并且字符串的转换编码为"UTF-8"。
2、一次性永久配置:装配消息转换器StringHttpMessageConverter,设置字符编码为UTF-8,修改配置文件Spring MVC配置文件springmvc-servlet.xml,如下
<!-- 装配消息转换器StringHttpMessageConverter,解决中文乱码 --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
注: 在上面配置中,通过设置 StringHttpMessageConverter 中的supportedMediaTypes 属性指定媒体类型为
application/json,字符编码为"UTF-8"。
二、JSON数据传递的日期格式问题
Spring MVC中使用@ResponseBody返回JSON数据时,日期格式默认显示为时间戳(如:517939003300),所以需要转换时间为可读格式如:yyyy-MM-dd。
此处有两种解决方法:
注:以下两种解决方式需要导入JSON包 fastjson-1.2.13.jar
1、注解方式:@JSONField(format=“yyyy-MM-dd”)
直接给需要转换的日期类型属性标注该注解
例:
package cn.smbms.pojo; import java.util.Date; import java.util.List; import javax.validation.constraints.NotNull; import javax.validation.constraints.Past; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.format.annotation.DateTimeFormat; import com.alibaba.fastjson.annotation.JSONField; /** * 用户实体类 * @author 14062 * */ public class User implements java.io.Serializable{ private Integer id; //主键id private String userPassword; //用户密码 private Integer gender; //性别 @JSONField(format="yyyy-MM-dd") private Date birthday; //出生日期 //省略getter/setter方法 }
注:
- format参数指定转换后的日期格式
- 此种方式简单直接,但是存在一定的缺点:代码具有强侵入性,紧耦合,并且修改麻烦,所以一般不采用这种硬编码的方式来处理。
2、配置FastJson的消息转换器-----FastJsonHttpMessageConverter
在Spring MVC中,需要进行JSON转换时,通常会使用FastJson提供的FastJsonHttpMessageConverter 来完成。使用FastJsonHttpMessageConverter 的序列化属性WriteDateUseDateFormat 配置使用默认日期类型。
修改SpringMVC 配置文件springmvc-servlet.xml
<mvc:annotation-driven> <mvc:message-converters> <!--配置FastJsonHttpMessageConverter消息转换器,解决日期格式问题 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=utf-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <!--输出Date的日期转换器 --> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
小结:
-
若没有配置消息转换器的
<value>WriteDateUseDateFormat</value>
,并且也没有加入属性注解@JSONField(format="yyyy-MM-dd")
,则转换为会输出时间戳。 -
若只配置了
<value>WriteDateUseDateFormat</value>
,则会转换输出 yyyy-MM-dd HH:mm:ss 格式的日期。 -
若只配置了
<value>WriteDateUseDateFormat</value>
,
则会转换输出yyyy-MM-dd HH:mm:ss格式的日期。
- Spring MVC rest接收json中文格式数据显示乱码
- Spring MVC后台返回JSON数据中文乱码问题解决
- springMVC_json格式数据的接收和发送(未解决中文乱码问题)
- 中文格式python 打印json格式的数据中文显示问题
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
- Spring mvc 使用Gson 返回Json数据 中文乱码问题
- python 打印json格式的数据中文显示问题
- springMVC_json格式数据的接收和发送(未解决中文乱码问题)
- Http Post请求提交json格式数据工具类,解决请求参数中文乱码问题
- Spring MVC 对于返回JSON格式数据的中文乱码 解决方法
- 解决sencha touch显示.JSON包含中文数据时显示乱码问题
- python 打印json格式的数据中文显示问题
- 解决sencha touch显示.JSON包含中文数据时显示乱码问题
- 将含有timestamp的json对象的毫秒数转成日期格式 ssh+jqery+json中timestamp数据问题
- SpringMVC 3.1下返回json时中文显示乱码问题的解决方案
- Date类型数据转化json后,在jsp获取日期显示为[object Object]问题
- Jox(解决了日期格式转化和导出XML中文乱码问题)
- 解决jQuery $.getJSON() 传递参数中文乱码问题
- 解决jQuery $.getJSON() 传递参数中文乱码问题
- Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案