Spring 注解之@RequestBody和@PostMapping


@RequestBody的使用

  注解@RequestBody用於接收前端傳遞給后端的、JSON對象的字符串,這些數據位於請求體中,適合處理的數據為非Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/json、application/xml等類型的數據。就application/json類型的數據而言,使用注解@RequestBody可以將body里面所有的JSON字符串綁定到后端相應的Java Bean上,后端再進行數據解析和業務操作。需要格外注意的是,JSON字符串中的key必須對應Java Bean中的屬性名;否則,無法接收到相關key的值。

  GET請求中,因為沒有請求體,所以@RequestBody並不適用。POST請求中,必須要在請求頭中聲明數據的類型Content-Type。Spring MVC通過使用系統默認配置的HttpMessageConverters解析請求體中的數據,然后把數據綁定到相應的Java Bean上。

   溫馨提示:一個請求,只可以使用一個@RequestBody注解,卻可以使用多個@RequestParam注解。

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/testRequestBody")
    public User testRequestBody(@RequestBody User user){
        return user;
    }

    /**
     * 同時使用 @RequestBody 與 @RequestParam()
     * http://localhost:8087/wiener/user/testRequestBody?token=IamToken
     * @param user
     * @param token
     * @return
     * @throws Exception
     */
    @PostMapping("/testRequestBodyAndParam")
    public User testRequestBodyAndParam(@RequestBody User user, @RequestParam("token") String token) throws Exception {
        user.setRemark(token);
        return user;
    }
}

  其中,Java Bean User定義如下:


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.stereotype.Component;

import java.io.Serializable;

/**
 * @author Wiener
 */
@Setter
@Getter
@ToString
@Component
public class User implements Serializable {
    private static final long serialVersionUID = 4268287310462519889L;
    private Long id;
    private int age;
    private String name;
    private String remark;

    public User() {
    }
    public User(Long id, int age, String name) {
        super();
        this.id = id;
        this.age = age;
        this.name = name;
    }

}

  啟動項目,使用Postman模擬前端HTTP請求,測試結果如下,說明兩個注解可以同時使用。

Spring 注解之@PostMapping

  @PostMapping是一個組合注解,在Spring framework 4.3作為@RequestMapping(method = RequestMethod.POST)的變體引入,它將HTTP Post請求映射到特定的處理方法上。例如,使用@PosttMapping("/testRequestBody")就等價於@RequestMapping(value ="/testRequestBody",method = RequestMethod.POST),顯然,這可以精簡我們的代碼。

小結

  在GET請求中,不能使用@RequestBody。在POST請求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,對於參數轉化的約定,前后端必須統一。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM