• 【SpringMVC】json


    JSON

    JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。
    JSON是一种轻量级、基于文本的、可读的格式。
    JSON是参考JavaScript 对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同。
    JSON是前后端交互的一种格式信息。

    一、结合SpringMVC使用jackson与前端交互

    1.添加web框架支持,和创建lib目录防止资源导出失败

    保证配置好了前端控制器,以及spring管理的配置文件。这些都是约定大于配置。

    2.导包jackson

        <dependencies>
            <dependency>
                <groupId>com.fasterxml.jackson.coregroupId>
                <artifactId>jackson-databindartifactId>
                <version>2.11.3version>
            dependency>
        dependencies>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.使用jackson结合处理器映射器返回json

    通常情况下,我们可以用@ResponseBody注解,只返回一个字符串结果到页面上。

    @Controller
    public class UserController {
        @GetMapping("/h1")
        @ResponseBody//结合Mapping映射器使用,不走视图解析器,不再返回视图,而是返回一个字符串。
        public String test(){
            User user = new User("kxy", 19, "男");
            return user.toString();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    而它只是个对象形式的字符串。而我们需要做的是,把他变成json字符串。

    @Controller
    public class UserController {
        @RequestMapping("/h1")
        @ResponseBody
        public String test() throws JsonProcessingException {
            ObjectMapper mapper = new ObjectMapper();
            User user = new User("kxy", 19, "男");
            String json = mapper.writeValueAsString(user);
            return json;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    jackson包下的ObjectMapper的mapper对象,它的writeValueAsString方法可以把一个对象转成json字符串。这只是使用对象转json的常用方法之一。

    此外我们还需要解决返回json到前端产生的乱码问题:

    
    <mvc:annotation-driven>
            <mvc:message-converters>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="UTF-8"/>
                bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="objectMapper">
                        <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                            <property name="failOnEmptyBeans" value="false"/>
                        bean>
                    property>
                bean>
            mvc:message-converters>
        mvc:annotation-driven>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    最后,就是一个完美的java对象返回json到前端的视图:
    在这里插入图片描述
    当然,你也可以把多个对象封装到一个集合(如ArrayList)那么:

        @RequestMapping("/h2")
        @ResponseBody
        public String test2() throws JsonProcessingException {
            ObjectMapper mapper = new ObjectMapper();
            User user1 = new User("kxy", 19, "男");
            User user2 = new User("kxy1", 19, "男");
            User user3 = new User("kxy2", 19, "男");
            User user4 = new User("kxy3", 19, "男");
            ArrayList<User> list = new ArrayList<>();
            list.add(user1);
            list.add(user2);
            list.add(user3);
            list.add(user4);
            String json = mapper.writeValueAsString(list);
            return json;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    时间戳转换成json:

        @GetMapping("/h3")
        @ResponseBody
        public String test3() throws JsonProcessingException {
            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            mapper.setDateFormat(simpleDateFormat);
            Date date = new Date();
            String json = mapper.writeValueAsString(date);
            return json;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果每个方法里都需要这样重复的代码,我们可以写一个JsonUtil类实现代码的复用:

    public class JsonUtil {
        public static String getJson(Object o){
           return getJson(o,"yyyy-mm-dd HH:mm:ss");
        }
    
        public static String getJson(Object o, String dateFormat){
            ObjectMapper mapper = new ObjectMapper();
            mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
            mapper.setDateFormat(simpleDateFormat);
            try {
                return mapper.writeValueAsString(o);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    	@GetMapping("/h3")
        @ResponseBody
        public String test3(){
            return JsonUtil.getJson(new Date(),"yyyy-mm-dd hh:mm:ss");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    小插曲

    关于

    @Controller
    public class UserController {
        @RequestMapping("/h1")
        @ResponseBody
        public String test() throws {
            return "str";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    @RestController
    public class UserController {
        @RequestMapping("/h1")
        public String test() throws {
            return "str";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    以上两段代码效果一样。@RestController表示类下面的所有方法的返回值都是一个普通的字符串,不会受视图解析器所影响。

    二、结合SpringMVC使用fastJson与前端交互

    导包:

    		<dependency>
                <groupId>com.alibabagroupId>
                <artifactId>fastjsonartifactId>
                <version>2.0.7version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    用法:

        @RequestMapping("/h1")
        @ResponseBody
        public String test(){
            User user = new User("kxy", 19, "男");
            return JSON.toJSONString(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    除此之外:

    JSON.parseObject() //json转对象
    (JSONObject) JSON.toJSON() //java对象转json对象
    JSON.toJavaObject() //json对象转java对象

  • 相关阅读:
    OOM和JVM最详细介绍
    Vue项目上线打包优化
    《微信小程序开发从入门到实战》学习二十五
    yoloV8训练自己的数据集合资源
    Ansible——template模块
    英语——分享篇——每日100词——601-700
    恭喜你~遇到了最有趣的算法(二)
    火灾报警联网FC18中CAN光端机常见问题解答和使用指导
    常用的数据可视化大屏软件有哪些?
    Qt QtWidgets相关问题汇总
  • 原文地址:https://blog.csdn.net/qq_53635765/article/details/126693641