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

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 result = new HashMap();
        //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>
                    
                    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                        <property name="setSupportedMediaTypes" >
                            <list>
                                <value>application/json;charset=UTF-8value>
                            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-8value>
                    <value>application/jsonvalue>
                list>
            property>
            <property name="features">
                <list>
                    <value>WriteDateUseDateFormatvalue>
                list>
            property>
        bean>
    mvc:message-converters>
mvc:annotation-driven>
  • 自定义FastJson消息转换器(坑爹,视频不讲了,让自己的去解决)

你可能感兴趣的:(默然说话)