使用SPringMVC-JSON对象处理数据

1.使用@ResponseBody实现数据输出

注意:在使用@ResponseBody注解时要引入fastjson-1.2.13.jar这个包

1.controller层代码实现:

//验证userCode是否存在
@RequestMapping("/checkUserCode")
@ResponseBody //等同于out.print()
public String chekcUserCode(String userCode){
    HashMap<String,Object> hashMap=new HashMap<String,Object>();
    User user=userService.getUserByCode(userCode);
    if(user==null){
        //可以使用
        hashMap.put("userCode","notexist");
    }else{
        //已存在
        hashMap.put("userCode","exist");
    }
    return JSON.toJSONString(hashMap);
}

2.视图层代码实现:

/*
	 * 验证
	 * 失焦\获焦
	 * jquery的方法传递
	 */
userCode.bind("blur",function(){
    //ajax后台验证--userCode是否已存在
    //user.do?method=ucexist&userCode=**
    $.ajax({
        type:"GET",//请求类型
        url:path+"/checkUserCode",//请求的url
        data:{method:"ucexist",userCode:userCode.val()},//请求参数
        dataType:"json",//ajax接口(请求url)返回的数据类型
        success:function(data){//data:返回数据(json对象)
            if(data.userCode == "exist"){//账号已存在,错误提示
                validateTip(userCode.next(),{"color":"red"},imgNo+ " 该用户账号已存在",false);
            }else{//账号可用,正确提示
                validateTip(userCode.next(),{"color":"green"},imgYes+" 该账号可以使用",true);
            }
        },
        error:function(data){//当访问时候,404,500 等非200的错误状态码
            validateTip(userCode.next(),{"color":"red"},imgNo+" 您访问的页面不存在",false);
        }
    });


}).bind("focus",function(){
    //显示友情提示
    validateTip(userCode.next(),{"color":"#666666"},"* 用户编码是您登录系统的账号",false);
}).focus();

3.解决JSON中文乱码问题:

方式1:controller层:在@requestMapping参数里面添加:produces = {“application/json;charset=utf-8”}即可,注意使用这种方式只能单个实现

@RequestMapping(value = "/userview",produces = {"application/json;charset=utf-8"})/*,produces = {"application/json;charset=utf-8"}*/
@ResponseBody
public Object viewUser(Integer id){
    //根据ID查询用户信息
    User user=userService.getUserById(id);
    if(user==null){
        return "nodata";
    }
    return JSON.toJSONString(user);
}

方式2:配置全局设计编码格式:优势:不需要一个个去配置

<!--启用SpringMVC注解-->
<mvc:annotation-driven >
    <mvc:message-converters>
        <!--解决JSON格式数据中文乱码-->
        <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>

4.解决JSON数据传递的日期格式问题:@JSONField

方式1:User实体类:

public class User {
	@JSONField(format = "yyyy-MM-dd")
	private Date   birthday;
}

缺点:该解决方案的代码具有强侵入性,紧耦合,并且修改麻烦,在实际开发,不建议采用这种硬编码的方式来处理;

方式2:配置FastJson的消息转换器:

注意:使用消息转换器它的格式是yyyy-MM-dd HH:mm:ss,在使用中使用注解优先于配置的消息转换器

<!--conversion-service:指定要启用的转换器-->
<mvc:annotation-driven ><!--conversion-service="myConversionService"-->
    <mvc:message-converters>
        <!--解决JSON格式数据中文乱码-->
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
        <!--解决日期格式问题-->
        <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>

2.使用@InitBinder装配自定义转换器

第一步:注册日期转换器

public class BaseController {
    @InitBinder
    public void initBinder(WebDataBinder dataBinder){
        System.out.println("=================initBinder=====================");
        dataBinder.registerCustomEditor(Date.class,
                                        new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));//true表示允许为空
    }
}

第二步:继承有注册转换器的BaseController

@Controller
public class UserController extends BaseController {
    @Autowired
    private UserService userService;
    @Autowired
    private RoleService roleService;

    @RequestMapping("/main.html")
    public String toMain(){
        return "frame";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值