原创

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 注解进行注释的类型必须与从客户 Controller 发送的 JSON 相对应:

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

这里,我们将 HttpRequest 主体的对象映射到我们的 LoginForm 对象。
让我们用 CURL 测试一下:

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

@ResponseBody

@ResponseBody 注解告诉 Controller,返回的对象被自动序列化成 JSON 并传递回 HttpResponse 对象。
假设我们有一个自定义的 Response 对象:

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!!!"}

记住,我们不需要使用 @ResponseBody 注解来注释 @RestController-annotated 控制器,因为它在这里是默认使用的。

总结

在本教程中,我们演示了如何使用 @RestController 和 @ResponseBody 注解。

欢迎关注我的公众号:曲翎风,获得独家整理的学习资源和日常干货推送。
如果您对我的专题内容感兴趣,也可以关注我的博客:sagowiec.com

该篇文章的评论功能已被站长关闭