@RequestBody와 @RequestParam의 차이점은 무엇입니까?
알 수 .@RequestBody
리음
@RequestBody
method 파라미터 annotation은 메서드 파라미터가 HTTP 요구 본문 값에 바인드되어야 함을 나타냅니다.예를 들어 다음과 같습니다.
@RequestMapping(value = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
writer.write(body);
}
하려면 , 「」메서드를 합니다.
HttpMessageConverter
HttpMessageConverter
는 .HTTP를 사용합니다.
DispatcherServlet
기반 합니다.DefaultAnnotationHandlerMapping
★★★★★★★★★★★★★★★★★」AnnotationMethodHandlerAdapter
3.0에서는 Spring 3.0을 사용합니다AnnotationMethodHandlerAdapter
.@RequestBody
다음과 것이 .HttpMessageConverter
는 디폴트로 되어 있습니다.「 」 。...
하지만 제 혼란스러운 점은 그들이 문서에 쓴 문장이에요
@RequestBody 메서드파라미터 주석은 메서드파라미터가 HTTP 요구 본문 값에 바인드되어야 함을 나타냅니다.
그게 무슨 뜻일까요?누가 예를 들어줄 수 있나요?
@RequestParam
는 spring doc입니다.
메서드 매개 변수가 웹 요청 매개 변수에 바인딩되어야 함을 나타내는 주석입니다.에서 주석이 됩니다.
Servlet
★★★★★★★★★★★★★★★★★」Portlet
환경을 개선합니다.
나는 그들 사이에 혼란이 생겼다.서로 어떻게 다른지 예를 들어주세요.
@RequestParam
주석이 달린 파라미터는 특정 Servlet 요청 파라미터에 링크됩니다.파라미터 값은 선언된 메서드 인수 유형으로 변환됩니다.이 주석은 메서드 매개 변수가 웹 요청 매개 변수에 바인딩되어야 함을 나타냅니다.
예를 들어 Spring Request Param의 Angular 요구는 다음과 같습니다.
$http.post('http://localhost:7777/scan/l/register?username="Johny"&password="123123"&auth=true')
.success(function (data, status, headers, config) {
...
})
RequestParam이 있는 엔드포인트:
@RequestMapping(method = RequestMethod.POST, value = "/register")
public Map<String, String> register(Model uiModel,
@RequestParam String username,
@RequestParam String password,
@RequestParam boolean auth,
HttpServletRequest httpServletRequest) {...
@RequestBody
주석이 달린 파라미터는 HTTP 요청 본문에 링크됩니다.파라미터 값은 HttpMessageConverters를 사용하여 선언된 메서드 인수 유형으로 변환됩니다.이 주석은 메서드 매개 변수를 웹 요청 본문에 바인딩해야 함을 나타냅니다.
예를 들어 Spring Request Body의 Angular 요구는 다음과 같습니다.
$scope.user = {
username: "foo",
auth: true,
password: "bar"
};
$http.post('http://localhost:7777/scan/l/register', $scope.user).
success(function (data, status, headers, config) {
...
})
RequestBody를 사용하는 엔드포인트:
@RequestMapping(method = RequestMethod.POST, produces = "application/json",
value = "/register")
public Map<String, String> register(Model uiModel,
@RequestBody User user,
HttpServletRequest httpServletRequest) {...
header " HTTP " " "Content-Type
본문을 합니다. , 요청 본문을 처리하십시오.
@RequestParam
←application/x-www-form-urlencoded
,@RequestBody
←application/json
,@RequestPart
←multipart/form-data
,
RequestParam(스프링 프레임워크 5.1.9).릴리스 API)
맵을 사용하여 매개 변수, 폼 데이터 및 멀티파트 요청의 부품을 조회할 수 있습니다.
RequestParam
name-value 형식 필드와 함께 사용될 수 있습니다.RequestBody(스프링 프레임워크 5.1.9).릴리스 API)
웹 요청 본문에 바인드됩니다.요청 본문은 HttpMessageConverter를 통해 전달되며 method 인수를 해결합니다.
content type
를 참조해 주세요.(예: JSON, XML)RequestPart(스프링 프레임워크 5.1.9).릴리스 API)
"의 부분을 연관짓는 데 사용됩니다.
multipart/form-data
" 요청RequestPart
보다 복잡한 내용을 포함하는 부품과 함께 사용될 수 있습니다.Http Message Converter(스프링 프레임워크 5.1.9).릴리스 API)
HTTP 요구 및 응답을 변환하거나 변환할 수 있는 컨버터입니다.
이미 알려진 모든 구현 클래스: ..., AbstractJsonHttpMessageConverter, AbstractXmlHttpMessageConverter, ...
@RequestParam
Spring은 GET/POST 요청에서 메서드 인수에 요청 파라미터를 매핑합니다.
GET 요구
http://testwebaddress.com/getInformation.do?city=Sydney&country=Australia
public String getCountryFactors(@RequestParam(value = "city") String city,
@RequestParam(value = "country") String country){ }
POST 요구
@RequestBody
make spring을 사용하여 요청 전체를 모델클래스에 매핑합니다.게터 메서드 및 세터 메서드에서 값을 가져오거나 설정할 수 있습니다.아래를 확인해 주세요.
http://testwebaddress.com/getInformation.do
당신은 가지고 있다JSON
프런트 엔드에서 전송되어 컨트롤러 클래스에 도달하는 데이터
{
"city": "Sydney",
"country": "Australia"
}
Java
코드 - 백엔드(@RequestBody
)
public String getCountryFactors(@RequestBody Country countryFacts)
{
countryFacts.getCity();
countryFacts.getCountry();
}
public class Country {
private String city;
private String country;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
@RequestParam
annotation은 Spring에게 GET/POST 요청의 요청 파라미터를 메서드 인수에 매핑해야 함을 나타냅니다.예를 들어 다음과 같습니다.
요청:
GET: http://someserver.org/path?name=John&surname=Smith
엔드포인트 코드:
public User getUser(@RequestParam(value = "name") String name,
@RequestParam(value = "surname") String surname){
...
}
그러니까 기본적으로는@RequestBody
는 (POST의 경우에도) 사용자 요구 전체를 String 변수에 매핑합니다.@RequestParam
는 method 인수에 대한 요구 파라미터를 1개(또는 여러 개) 사용할 때 사용합니다.
이름 @RequestParam을 보면 매우 간단합니다.하나는 요청을 처리하는 "Request"이고 다른 하나는 요청 파라미터만 Java 객체에 매핑하는 "Param"입니다.@RequestBody의 경우도 마찬가지로 클라이언트가 요청과 함께 json 객체 또는 xml을 전송한 경우처럼 요청과 함께 도착한 데이터를 처리합니다.@requestbody를 사용해야 합니다.
다음으로 @RequestBody의 예를 나타냅니다.컨트롤러를 먼저 보세요!!
public ResponseEntity<Void> postNewProductDto(@RequestBody NewProductDto newProductDto) {
...
productService.registerProductDto(newProductDto);
return new ResponseEntity<>(HttpStatus.CREATED);
....
}
그리고 여기 각도 컨트롤러가 있습니다.
function postNewProductDto() {
var url = "/admin/products/newItem";
$http.post(url, vm.newProductDto).then(function () {
//other things go here...
vm.newProductMessage = "Product successful registered";
}
,
function (errResponse) {
//handling errors ....
}
);
}
그리고 형태를 잠깐 살펴보자.
<label>Name: </label>
<input ng-model="vm.newProductDto.name" />
<label>Price </label>
<input ng-model="vm.newProductDto.price"/>
<label>Quantity </label>
<input ng-model="vm.newProductDto.quantity"/>
<label>Image </label>
<input ng-model="vm.newProductDto.photo"/>
<Button ng-click="vm.postNewProductDto()" >Insert Item</Button>
<label > {{vm.newProductMessage}} </label>
언급URL : https://stackoverflow.com/questions/28039709/what-is-difference-between-requestbody-and-requestparam
'programing' 카테고리의 다른 글
Next.js가 '@types/react'를 인식하지 않습니다. (0) | 2023.03.25 |
---|---|
Redux-Form 초기값: (0) | 2023.03.25 |
disable xampp redirect http to https (0) | 2023.03.25 |
XMLHttpRequest가 jQuery로 URL을 로드할 수 없습니다. (0) | 2023.03.20 |
Spring 부트애플리케이션 콘솔에서 상태 평가 보고서를 제외하려면 어떻게 해야 합니까? (0) | 2023.03.20 |