Springmvc--JSON

本文详细介绍了JSON作为轻量级数据交换格式的使用,它独立于编程语言且层次清晰。通过示例展示了JavaScript对象如何转换为JSON,以及如何处理JSON编码问题,包括解决乱码和日期格式化。此外,还提到了Spring MVC中处理JSON响应的方法,以及使用Jackson库进行对象到JSON的转换。最后,提供了一个JsonUtil工具类用于便捷地处理时间格式的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • JSON(JavaScript Object Notation,js 对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。
  • 采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁清晰的层次结构使得json成为理想的数据交换语言
  • 易于人的阅读和编写,同时也易于机器解析和生成,并有效提高网络传输效率。
    在JavaScript语言中,一切皆对象。因此,任何JavaScript支持的类都可以通过JSON来表示,例如字符串、数字、对象、数组等。
  • 对象表示为键值对,数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组
    例如:{“name”:“yf”,“age”:21,“sex”:“男”}
    这种就表示一个对象

JSON键值对是用来保存JavaScript对象的一种方式,和JavaScript对象的写法也大同小异。
例如JSON和JavaScript的相互转换

<script type="text/javascript">
        //编写一个JavaScript对象
        var student = {
            name:"yf",
            age:21,
            sex:"男"
        }
        //将这个对象转换为JSON
        var json = JSON.stringify(student);
        console.log(json);
        console.log("================")
        //将json转化为一个对象
        var student1 = JSON.parse(json);
        console.log(student1);
    </script>

在controller中将输出的对象转换为JSON字符串

@RequestMapping("/j1")
    @ResponseBody //这样就不会走视图解析器,直接返回一个字符串
    public String json1() throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        User user = new User("yf", 21, "男");
        String s = objectMapper.writeValueAsString(user);
        return s;
    }

返回集合类型的操作方法也是一样的

    public String json1() throws JsonProcessingException {

        ObjectMapper objectMapper = new ObjectMapper();

        User user = new User("yf", 21, "男");
        User user2 = new User("yf", 21, "男");
        User user3 = new User("yf", 21, "男");
        User user4 = new User("yf", 21, "男");
        List<User> list = new ArrayList<>();
        list.add(user);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        String s = objectMapper.writeValueAsString(list);
        return s;
    }

@ResponseBody这个注解让controller方法不走视图解析器,直接将返回值输出到前端。
@RestController这个注解让整个controller类不走视图解析器,直接将返回值输出到前端。
ObjectMapper就是JackSon里面的类,可以将对象转化为Json字符串。
结果就是这样的
在这里插入图片描述
但是注意到这里是乱码的

乱码解决办法

在@RequestMapping里面有一个 products属性
这个属性中可以设置json输出编码

@RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")

上一种方法比较麻烦,如果项目中有许多请求则每一个都要添加,可以通过spring配置统一指定,这样就不用每次去处理了。
在springmvc的配置文件上添加一段消息,StringHttpMessageConverter转换配置。

<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <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>

输出时间的两种方式

如果使用date直接输出,输出到前端的是时间戳,看不懂
解决方法:

  • 使用SimpleDateFormat
    @RequestMapping("/j2")
    public String json2() throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        Date date = new Date();
        //自定义时间格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = dateFormat.format(date);
        String s = mapper.writeValueAsString(format);
        return s;
    }
  • 不使用时间戳的方式
    @RequestMapping("/j2")
    public String json2() throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        //不使用时间戳的方式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        Date date = new Date();
        //自定义时间格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mapper.setDateFormat(dateFormat);
        String s = mapper.writeValueAsString(date);
        return s;
    }

JsonUtile

先写一个关于时间转换的工具类。

    public static String getJson(Object object,String dateFormat){
        ObjectMapper mapper = new ObjectMapper();

        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);

        SimpleDateFormat format = new SimpleDateFormat(dateFormat);

        mapper.setDateFormat(format);

        String s = null;
        try {
            s = mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return s;
    }

然后再写一个普通对象的转换,使用重载,你可能会重新写过一遍objectMapper什么的,但是其实没必要,直接调用前面那个处理时间的就行,dateFormat传递一个默认值就行。

public static String getJson(Object object){
        return getJson(object,"yyyy-MM-dd HH:mm:ss");
    }

看这多方便对吧。

以下是一个简单的springmvc-config.xml配置文件的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 开启注解扫描 --> <context:component-scan base-package="com.example.controller"/> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 配置静态资源处理 --> <mvc:resources mapping="/static/**" location="/static/"/> <!-- 配置RequestMappingHandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean> <!-- 配置RequestMappingHandlerMapping --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> </beans> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值