SpringMVC响应json数据

Posted 戒爱学Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC响应json数据相关的知识,希望对你有一定的参考价值。

SpringMvc响应json数据

@Controller
@RequestMapping("/json")
public class JsonController 

    @RequestMapping("/js1")
    @ResponseBody   // 响应json:将return的值作为文本响应给客户端,而不是转发到对应页面
    public String js1()
        System.out.println("json");
        return "show";
    

访问js1()方法的映射url,js1()会将返回值中的字符串作为json数据进行传输。

这种方式只能返回String或者ModelAndView格式,无法直接传输对象,下面进行对象传输配置。

使用SpringMvc默认支持的json解析器

加入依赖:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.1</version>

在处理方法上加上@ResponseBody进行对象传输:

此时就可以进行对象的传输了。

然后实现List 的传输:

@RequestMapping("/js1")
    @ResponseBody   // 响应json:将return的值作为文本响应给客户端,而不是转发到对应页面
    public List<User> js1()
        List<User> ls = new ArrayList<>();
        ls.add(new User(1,"张三"));
        ls.add(new User(2,"李四"));
        ls.add(new User(3,"王五"));
        System.out.println("json");
        return ls;
    

结果:

可以发现返回数据是中括号包裹的。

数组和List形式的数据都是中括号包裹的。

在类上加上@RestController则方法上就不需要加@ResponseBody

@RestController
@RequestMapping("/json")
public class JsonController 

    @RequestMapping("/js1")
    public User js1()
        User user1 = new User(1, "张三");
        System.out.println("json");
        return user1;
    

结果:


发现仍然可以进行json数据传输。

SpringMVC -- SpringMVC的数据响应 回写数据 @ResponseBody(普通字符串,Json格式(FastJsonjackson配置优化))

1. 回写数据


1.1 直接返回字符串


1.1.1 通过SpringMVC框架注入的response对象


运行结果:


1.1.2 @ResponseBody注解


运行结果:


1.2 返回Json格式字符串(对象或者集合)


1.2.1 使用FastJson转换工具

FastJson详细介绍

FastJson依赖坐标

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>

注意:User类需要加上get方法和set方法才可以返回正确的json数据,否则返回{}

运行结果:


1.2.2 通过jackson转换json格式字符串

jackson相关依赖坐标

    <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>

运行结果:


1.2.3 直接返回对象 不用转换

配置SpringMVC核心配置文件:

    <!--配置处理器映射器-->
    <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>

测试代码:

运行结果:


1.2.4 配置注解驱动 代替上述繁琐的配置

配置SpringMVC核心配置文件:




以上是关于SpringMVC响应json数据的主要内容,如果未能解决你的问题,请参考以下文章

DEBUG关于SpringMVC的返回响应体文本json两种数据的乱码问题

SpringMVC -- SpringMVC的数据响应 回写数据 @ResponseBody(普通字符串,Json格式(FastJsonjackson配置优化))

用springmvc的@RequestBody和@ResponseBody 接收和响应json格式数据

SpringMVC转换JSON数据

SpringMVC 从入门到精通系列 04——响应数据和结果视图

SpringMVC--10配置过滤器以及Json