programing

@RequestBody와 @RequestParam의 차이점은 무엇입니까?

oldcodes 2023. 3. 25. 11:52
반응형

@RequestBody와 @RequestParam의 차이점은 무엇입니까?

알 수 .@RequestBody리음

@RequestBodymethod 파라미터 annotation은 메서드 파라미터가 HTTP 요구 본문 값에 바인드되어야 함을 나타냅니다.예를 들어 다음과 같습니다.

@RequestMapping(value = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
  writer.write(body);
}

하려면 , 「」메서드를 합니다.HttpMessageConverterHttpMessageConverter는 .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본문을 합니다. , 요청 본문을 처리하십시오.

  • @RequestParamapplication/x-www-form-urlencoded,

  • @RequestBodyapplication/json,

  • @RequestPartmultipart/form-data ,


@RequestParamSpring은 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 요구

@RequestBodymake 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;
    }
}

@RequestParamannotation은 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

반응형