【SpringMVC注解篇】SpringMVC 注解驱动开发(二)JSON数据交互相关注解
JSON数据交互相关注解
@RequestBody
用于获取全部的请求体,注解只能写在形参前。@RequestBody本身不进行复杂的JavaBean映射,如果需要必须借助第三方组件完成,这里使用jackson。并且参数的键名称必须和实体类属性名一致。 (其实主要是属性对应的set方法,用属性无关,但是自动生成get,set方法都是按属性生成的,所以说与属性一致)。因为
- required : 用于指定是否必须有请求体
如果是简单的SSM项目需要引入对jackson的依赖,如果是springboot项目只需要引入web依赖,即可对jackson进行添加,因为springboot给我们做了jackson依赖的版本仲裁。
jackson具体依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
示例
@RestController
public class RequestBodyController {
/**@RequestMapping注解不指定RequestMethod代表任意类型都支持
* @param body
* @return
*/
@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required = false) String body) {
System.out.println("body: "+body);
return body;
}
/**
* 复杂类型参数
* @param user
* @return
*/
@RequestMapping("/getUser")
public User getUser(@RequestBody(required = false) User user) {
System.out.println("user: "+user);
return user;
}
}
class User {
private String username;
private String password;
public String getUsername() {
return username;
}
//get.. set.. 方法
// toString()方法
}
访问/useRequestBody请求
application/x-www-form-urlencoded
后台打印
application/json
后台打印
访问/getUser请求
application/x-www-form-urlencoded
后台报错不支持的内容类型 ‘application/x-www-form-urlencoded;charset=UTF-8’
application/json
后台打印
@ResponseBody
用于用流输出响应正文,注解可以写在类或方法上
示例
@Controller
public class ResponseBodyController {
@RequestMapping("useResponseBody")
@ResponseBody
public String useResponseBody(String name) {
return name;
}
}
@RestController
是@Controller和@ResponseBody的组合注解。它具备@Controller注解的全部功能,同时多了一个@ResponseBody注解的功能
@RestControllerAdvice
是@ControllerAdvice和@ResponseBody的组合注解。它和@ControllerAdvice注解的作用一样,并且支持@ResponseBody的功能