zoukankan      html  css  js  c++  java
  • Spring’s RequestBody and ResponseBody Annotations

    1.简介

    在这篇文章中,我们简要概述了Spring @RequestBody@ResponseBody注释。

    2. @RequestBody

    简而言之,@RequestBody注释将HttpRequest消息体映射到域对象,从而实现将HttpRequest消息自动反序列化到Java对象上。

    首先,让我们看一下Spring控制器方法:

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

    Spring会自动将JSON反序列化为Java类型,前提是指定了适当的JSON。

    默认情况下,我们使用@RequestBody注解注释的对象类型必须与从客户端控制器发送的JSON相对应:

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

    这里,我们用来表示HttpRequest消息体的json内容映射到我们的LoginForm对象。

    让我们用CURL测试一下:

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

    这就是使用@RequestBody注释的Spring REST API客户端所需的全部内容

    3. @ResponseBody

    @ResponseBody注解告诉控制器返回的对象将自动序列化为JSON,并直接返回给HttpResponse对象(而不经过视图层渲染)。

    假设我们有一个自定义的Response对象:

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

    接下来,可以实现相关的控制器:

    @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,因为@RestController默认指定就是讲json和对象之间进行序列化和反序列化,就是默认包含 @RequestBody @ResponseBody

    4.结论

    我们为Spring应用程序构建了一个简单的客户端,演示了如何使用@RestController@ResponseBody注解

  • 相关阅读:
    Integrating AngularJS with RequireJS
    commonjs AMD,CMD
    JavaScript Module Pattern: In-Depth
    Javascript模块化编程(一):模块的写法
    Javascript模块化编程(三):require.js的用法
    Javascript模块化编程(二):AMD规范
    Log4J日志管理类使用详解 (转)
    细说JAVA反射
    test1
    test
  • 原文地址:https://www.cnblogs.com/gc65/p/10645790.html
Copyright © 2011-2022 走看看