Controller 返回 json那些小事

想要将对象转换为json我们需要先在maven中导入一些包。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
</dependency>

我们测试一下

@RequestMapping(value = "/quick3")
@ResponseBody
public String save3() throws JsonProcessingException {
    User user = new User();
    user.setName("探索星空");
    user.setAge(12);

    ObjectMapper o = new ObjectMapper();
    String s = o.writeValueAsString(user);

    return String;
}

运行结果出现了http 500错误

我又在纯Java中测试了一下

class Solution {
    public static void main(String[] args) throws JsonProcessingException {
        User user = new User();
        user.setName("探索星空");
        user.setAge(12);

        ObjectMapper o = new ObjectMapper();
        String s = o.writeValueAsString(user);
        System.out.println(s);
    }
}

output: {"name":"探索星空","age":12}

一切正常,我又仔细看了下之前报错的信息......

Handler dispatch failed(处理程序调度失败);一般出现这个提示,就是说明有包没有导入。

看了下WEB-INF/lib下的包果然没有。

Controller 返回 json那些小事

果断点击file->project structure->artifacts 。put需要的包

Controller 返回 json那些小事

再次运行又发现一个新的问题-字符乱码:Controller 返回 json那些小事

还好这个问题比较简单,我们在spring-mvc的配置文件中加入

<!-- 用于使用@ResponseBody后返回中文避免乱码 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean id="stringHttpMessageConverter"
                  class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="writeAcceptCharset" value="false" />
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </list>
    </property>
</bean>

问题顺利解决:Controller 返回 json那些小事

优化配置

每次都要这样恐怕太麻烦了

ObjectMapper o = new ObjectMapper();
String s = o.writeValueAsString(user);

我们可以在spring-mvc的配置文件中加入

<!--    处理json-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </list>
    </property>
</bean>

这样处理后,只要在Controller中返回需要转化的对象会可以了

@RequestMapping(value = "/quick2")
@ResponseBody
public User save2() throws JsonProcessingException {
    User user = new User();
    user.setName("探索星空");
    user.setAge(12);
    return user;
}

结果:Controller 返回 json那些小事

值得一提的是,这种方法配置的程序会自动加入utf-8头字段声明,我们删去之前处理乱码的代码

结果:Controller 返回 json那些小事

大功告成。

上一篇:# redis 光速入门和java操作redis


下一篇:Spring之IOC