(十三)springMvc 处理 Json

目录

为什么用 Json

Json 格式简单,语法简单,解析简单 ;


处理 json 的流程

判断客户端传来的数据格式,如果是 json 格式,则对 controller 方法的形参上使用 @RequestBodyjson 串转为 java 对象 ;如果不是,则直接进行处理 ;

处理完毕以后,使用 @ResponseBodyjava 串转为 json 对象,在返回值前面加上这个注解 ;


环境准备

导入如下包 :

spring 4 之前导入下面的包:

jackson-mapper-asl-1.9.13.jar

jackson-core-asl-1.9.13.jar

spring 4 之后导入下面的包:

jackson-core-2.9.1.jar
jackson-databind-2.9.1.jar
jackson-annotations-2.9.1.jar


配置 json 转换器

springMvc.xml 中进行配置,和 参数绑定 一样,在适配器中进行配置 ;但是我们使用 <mvc:annotation-driven"/> 标签便不再需要进行配置 ;


后记

经过一系列的踩坑,终于在浏览器看到了 json


更新

当初为了赶时间,springMvc 后面学的很着急,博客其实都没记录下什么;现在抽时间更新下;

现在推行 前后端分离 开发,博主看来简直就是个前后端耍锅开发;

前后端耍锅开发,前后端通过统一接口打交道,一般约定传递 JSON 数据格式 ;

spingMvc 支持处理 JSON 格式的数据,使用 @RequestBody 可以完成数据绑定;

对于 @ResponseBody ,我是没怎么使用,我的 Controller 方法返回一般都返回字符串,在方法里面使用 FastJson 自己构建的 JSON 串,方便加上结果状态码;

    @ResponseBody
    @RequestMapping(value = "/getContractsByKeyWords", method = {RequestMethod.POST})
    public String getContractsByKeyWords(@RequestBody ContractStrength contractStrength, HttpSession session) throws ParseException {
        if (null == contractStrength.getPage()) {
            Page<ContractStrength> page = new Page<>();
            contractStrength.setPage(page);
        }
        JSONObject jsonObject = new JSONObject();
        if (contractStrength.getPage().getPageNo() <= 0) {
            jsonObject.put("result", "0");
            jsonObject.put("resultInfo", "输入页码有误");
            return jsonObject.toJSONString();
        }


        List<ContractVo> contractVos = contractServices.getContractsByKeyWords(contractStrength);

        session.setAttribute("contractStrength", contractStrength);

        if (contractVos.size() > 0) {
            jsonObject.put("result", "1");
            jsonObject.put("resultMessage", contractVos);
        } else {
            jsonObject.put("result", "0");
            jsonObject.put("resultInfo", "没有符合条件的合同");
        }

        jsonObject.put("page", contractStrength.getPage());


        return JSONObject.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty).
                replaceAll("null", "\"\"");
    }

最后还需要配置下 JSON 的码表,否则会中文乱码 ;

    <!-- 使用基于注解的 处理器映射器和处理器适配器  -->
    <!-- validator :使用检验器-->
    <mvc:annotation-driven validator="validator">
        <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="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>
posted @ 2018-09-20 17:36  Yiaz  阅读(150)  评论(0编辑  收藏  举报