zoukankan      html  css  js  c++  java
  • (十三)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>
    
  • 相关阅读:
    E
    CSU 1757 火车进站 1757
    [Unity游戏开发]场景切换
    相机跟随
    [Unity游戏开发]Vector3类
    [Unity游戏开发] 关于向量计算的一些基础
    [Unity游戏开发] MonoBehaviour类常用方法(脚本生命周期)
    C#学习笔记之——new在哪些地方用
    C#——快速排序
    C#学习笔记之——事件(Event)
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665651.html
Copyright © 2011-2022 走看看