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数据,并反序列化为对象