Skip to main content
 首页 » 编程设计

Spring的 RequestBody 和 ResponseBody注解

2022年07月19日257kevingrace

Spring的 RequestBody 和 ResponseBody注解

本文我们简要讨论下spring两个注解:RequestBody 和 ResponseBody注解。

@RequestBody 注解

@RequestBody注解可以映射httpRequest请求体至域对象,启用自动把httpRequest请求体反序列化为java对象。在实际应用中比如非常复杂的业务表达提交,如主子表嵌套情况。
首先,我们看下spring Controller方法:

@PostMapping("/request") 
public ResponseEntity postController(@RequestBody LoginForm loginForm) { 
    exampleService.fakeAuthenticate(loginForm); 
    return ResponseEntity.ok(HttpStatus.OK); 
} 

spring自动反序列化json字符串为java类型,但需要通过@RequestBody注解进行说明。下面定义java类:

public class LoginForm { 
    private String username; 
    private String password; 
    // ... 
} 

我们打算把请求体json映射为该类对象。下面通过curl进行测试:

curl -i \ 
-H "Accept: application/json" \ 
-H "Content-Type:application/json" \ 
-X POST --data  
  '{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request" 

当然,也可以使用postman等其他工具进行测试,需要注意的是,指定请求头信息为json,否则会解析错误。

@ResponseBody

@ResponseBody注解告诉controller,返回对象自动序列化为json字符串,并返回至HttpResponse 对象。下面定义一个业务对象:

public class ResponseTransfer { 
    private String text;  
      
    // standard getters/setters 
} 

相应的controller实现:

@Controller 
@RequestMapping("/post") 
public class ExamplePostController { 
  
    @Autowired 
    ExampleService exampleService; 
  
    @PostMapping("/response") 
    @ResponseBody 
    public ResponseTransfer postResponseController( 
      @RequestBody LoginForm loginForm) { 
        return new ResponseTransfer("Thanks For Posting!!!"); 
     } 
} 

在浏览器的开发者控制台或类似postman工具,可以看到回来的相应内容:

{"text":"Thanks For Posting!!!"} 

需要说明的是,使用@RestController注解时,就不需要指定@ResponseBody,因为默认已经增加该注解。

总结

我们通过示例说明了RequestBody 和 ResponseBody注解的使用,尤其RequestBody注解在提交复杂表单时非常有用。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/85213171