source

봄에 GET 요구 메서드와 POST 요구 메서드를 조합하다

ittop 2023. 2. 26. 10:32
반응형

봄에 GET 요구 메서드와 POST 요구 메서드를 조합하다

이 두 가지를 모두 지원하는 리소스가 있습니다.GET그리고.POST요청한다.다음은 샘플 리소스의 샘플 코드입니다.

@RequestMapping(value = "/books", method = RequestMethod.GET)
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter, two @RequestParam parameters, HttpServletRequest request)
    throws ParseException {
        LONG CODE
}


@RequestMapping(value = "/books", method = RequestMethod.POST)
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter, BindingResult result)
        throws ParseException {
        SAME LONG CODE with a minor difference
}

두 가지 방법의 코드는 변수 정의를 제외하고 실질적으로 동일합니다.이 두 가지 방법은 다음을 사용하여 쉽게 결합할 수 있습니다.method = {RequestMethod.POST, RequestMethod.GET}, 및 심플한if안에서.시도했지만 효과가 없습니다.두 가지 방법은 마지막에 다른 매개 변수가 있기 때문입니다.HttpServletRequest그리고.BindingResult(the)@RequestParam는 필수가 아니기 때문에 에서는 필요 없습니다.POST요구).이 두 가지 방법을 어떻게 결합할 수 있는지 알고 계십니까?

@RequestMapping(value = "/testonly", method = { RequestMethod.GET, RequestMethod.POST })
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter,
        @RequestParam(required = false) String parameter1,
        @RequestParam(required = false) String parameter2, 
        BindingResult result, HttpServletRequest request) 
        throws ParseException {

    LONG CODE and SAME LONG CODE with a minor difference
}

한다면@RequestParam(required = true)그런 다음 매개 변수1, 매개 변수2를 전달해야 합니다.

BindingResult를 사용하여 조건에 따라 요청하십시오.

반대편

@RequestMapping(value = "/books", method = RequestMethod.GET)
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter,  
    two @RequestParam parameters, HttpServletRequest request) throws ParseException {

    myMethod();

}


@RequestMapping(value = "/books", method = RequestMethod.POST)
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter, 
        BindingResult result) throws ParseException {

    myMethod();

    do here your minor difference
}

private returntype myMethod(){
    LONG CODE
}

다음은 이를 실현하는 방법 중 하나이며, 이상적인 방법은 아닐 수 있습니다.

두 가지 유형의 요구를 모두 수용하는 하나의 방법을 사용하여 수신한 요구 유형이 "GET"인지 "POST"인지 확인합니다.이것을 알게 되면, 각각의 조작을 실시해, 요구 방법 IE GET과 POST의 양쪽 모두에 대해서 공통의 태스크를 실행하는 하나의 방법을 호출합니다.

@RequestMapping(value = "/books")
public ModelAndView listBooks(HttpServletRequest request){
     //handle both get and post request here
     // first check request type and do respective actions needed for get and post.

    if(GET REQUEST){

     //WORK RELATED TO GET

    }else if(POST REQUEST){

      //WORK RELATED TO POST

    }

    commonMethod(param1, param2....);
}
@RequestMapping(value = "/books", method = { RequestMethod.GET, 
RequestMethod.POST })
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter,
     HttpServletRequest request) 
    throws ParseException {

//your code 
}

이것은, GET 와 POST 의 양쪽 모두에서 동작합니다.

Pojo(BooksFilter)가 요청 파라미터에서 사용하는 속성을 포함해야 하는 경우 GET의 경우

아래와 같이

public class BooksFilter{

private String parameter1;
private String parameter2;

   //getters and setters

URL은 다음과 같습니다.

/books? parameter1=blah

이와 같이 GET과 POST 양쪽에 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17987380/combine-get-and-post-request-methods-in-spring

반응형