您的位置:首页 > Web前端 > JavaScript

JSON对象、中文乱码及时间转换-默然说话20170331备课笔记

2017-03-31 17:02 495 查看

JSON对象(Map对象转JSON)

导入jastjson-1.2.13.jar

验证方法

返回值:Object(JSON对象)

@ResponseBody

作用:将标注该注解的处理方法的返回结果直接写入HTTP response Body中,一般会在异步获取数据时使用(ajax)

注意:如果要输出中国字,必须在控制器方法中调用URLEncoder.encode()方法

URLEncoder.encode(str, “UTF-8”);

如果要输出中国字,必须在js中调用decodeURI()方法

控制器端方法示例

@RequestMapping("/checkUserName")
@ResponseBody
public Object checkUserNameExtist(String name) {
Map<String, String> result = new HashMap<String, String>();
//StringUtils是com.mysql.jdbc提供的静态类,在mysql的数据库连接jar中
if (StringUtils.isNullOrEmpty(name)) {
//如果要输出中文信息必须进行编码,使用java.net.URLEncoder.encode("中国字","UTF-8")方法
result.put("message", MyUtils.ajaxEncoding("用户名已存在"));
} else {
Users users = usersService.findUserExist(name);

if (users == null) {
result.put("message", MyUtils.ajaxEncoding("用户名可以使用"));
} else {
result.put("message", MyUtils.ajaxEncoding("用户名已存在"));
}

}
return JSONArray.toJSONString(result);
}


上面代码中用到的MyUtils代码示例

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class MyUtils {
public static String ajaxEncoding(String str){
try {
str=URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
}


jsp页面的ajax示例,使用jquery-1.11.3

<script src="js/jquery.min.js" charset="UTF-8"></script>
<script type="text/javascript" charset="UTF-8">
$("#userName").bind("blur",function(){
$.ajax({
type:"POST",
url:"checkUserName",
data:{name:$("#userName").val()},
dataType:"json",//返回值的数据类型,默认是string
success:function(data){
//如果没有指定dataType属性为json,则需要下面代码把字符串转换为JSON对象
//data=$.parseJSON(data);
alert(decodeURI(data.message));
}
});
});
</script>


解决中文乱码的简单方式

使用@RequestMapping的produces属性

简单方便,但每次用都要配置

装配StringHttpMessageConverter,设置编码为UTF-8

supportedMediaTypes属性

指定媒体类型:application/json

字符编码:UTF-8

一次配置,永久搞定

使用@RequestMapping

@RequestMapping(value="/displayUserInfo",method=RequestMethod.GET,produces="{application/json;charset=UTF-8}")


装配StringHttpMessageConverter

<mvc:annotation-driven >
<mvc:message-converters>
<!-- 解决ajax中文乱码问题 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="setSupportedMediaTypes" >
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>


解决时间对象转JSON时间的格式问题

在实体类的属性上加@JSONField(format=”yyyy-MM-dd”)

侵入性强,强耦合,不建议使用

@JSONField(format="yyyy-MM-dd")


配置FastJson的消息转换器-FastJsonHttpMessageConvertor

配置于中

在配置之后,不需要在代码中写JSONArray.toJSONString(user)的代码了,直接返回实体对象即可

只有默认的返回日期格式(不能更改么?!)

如果要改,只能使用注解@JSONField来更改

<mvc:annotation-driven >
<mvc:message-converters>
<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>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>


自定义FastJson消息转换器(坑爹,视频不讲了,让自己的去解决)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息