Spring接收和响应json数据

Posted jeat

tags:

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

一、前言

  关于什么是json以及基本使用技巧,为什么使用json等等,这里不再重复,直接进入主题

     :服务端接收json数据还原为java对象,称为反序列化,反之,将java对象作为响应转换为json数据发回给客户端,称为序列化

二、导入json相关框架的依赖(比如jackson)

  如果使用的是spring boot框架,导入spring boot相关依赖后,就存在相关依赖,无需重复,否则会报错;

    如果使用的是spring MVC框架,就需要手动导入相关依赖(比如Jackson),直接上代码,添加到pom文件中

<!-- jackson依赖 -->
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.7.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.7.0</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.7.0</version>
      </dependency>

 

二、响应json数据

  在spring框架中,controller方法正常写,如果需要响应json,增加@ResponseBody注解,表示当前return为数据不是视图,如果当前controller层都需添加@ResponseBody,则可以在类名前添加@RestController 注解(@ResponseBody@Controller合体)
 

三、在接受json对应的输入参数前,加上@RequestBody注解

  此处需注意,别把@RequestBody@ResponseBody放错地方,观察源代码可知,@RequestBody只能添加在参数前,而@ResponseBody添加在类和方法前

 

 

四、测试代码

import com.jeat.clinic.controller.OVmodel.BookType;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @author 
 * @class JsonTest
 * @Abstract
 * @date 2019/02/19
 */
@RestController
public class JsonTest {
    /**
     * 以实体类接收
     * @param bookType
     * @param request
     * @return
     * {"id":12,"typeName":"类型1"}
     */
    @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
    public BookType acceptJsonByEntity(@RequestBody BookType bookType, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());

        System.out.println(bookType);
        return bookType;
    }

    /**
     * 以map方式接收
     * @param paramsMap
     * @param request
     * @return
     */
    @RequestMapping(value="acceptJsonByMap")
    public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());

        System.out.println(paramsMap);
        return paramsMap;
    }

    /**
     * 以list方式接收(以json数组形式传递)
     * @param bookTypeList
     * @param request
     * @return
     */
    @RequestMapping(value="acceptJsonByList")
    public List<BookType> acceptJsonByList(@RequestBody List<BookType> bookTypeList, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());

        System.out.println(bookTypeList);
        return bookTypeList;
    }

    /**
     * 以单独属性形式接收
     * @param id
     * @param name
     * @return
     */
    @RequestMapping("acceptJsonBySingleParam")
    public MultiValueMap acceptJsonByRequestParam(@RequestBody MultiValueMap params
                                          /* @RequestBody int userId,
                                           @RequestBody String userName*/
    ) {

        System.out.println(params.get("userId")+","+params.get("userName"));
        return params;
    }
}

 

五、测试

  测试我们采用火狐浏览器插件RESTClient,不会的找度娘

1、传输实体(类)

 

响应结果:

客户端结果:

2以map方式接收

 

响应结果:

 

客户端结果:

 3、以list方式接收(以json数组形式传递)

 

响应结果:

客户端结果:

 

 

 附:RESTClient添加头字段操作:

 

 
 
 
 

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

Spring Boot 前端请求参数自动映射到枚举,后端响应JSON数据自动解析枚举

AJAX 响应:数据(JSON、XML)还是 HTML 片段? [关闭]

spring mvc接收ajax提交的JSON数据,并反序列化为对象

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

从 Spring 控制器方法发送 Json 响应的最佳实践

spring 方法怎么接收前端传入的json数据