[SPRING] Spring에서 GET 및 POST 요청 메소드 결합
SPRINGSpring에서 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 (@ RequestParam이 필요하지 않으므로 POST 요청에 필요하지 않음)가 있기 때문입니다. 어떤 아이디어를 두 가지 방법을 결합하는 방법?
해결법
-
==============================
1.
@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 (필수 = 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 }
-
==============================
2.아래는 당신이 그것을 달성 할 수있는 방법 중 하나이며, 이상적인 방법은 아닐 수도 있습니다.
아래는 당신이 그것을 달성 할 수있는 방법 중 하나이며, 이상적인 방법은 아닐 수도 있습니다.
한 가지 방법으로 두 가지 유형의 요청을 모두 받아 들인 다음 어떤 유형의 요청을 받았는지, 유형이 "GET"인지 "POST"인지 확인한 다음 해당 작업을 수행하고 일반적인 작업을 수행하는 한 가지 방법을 호출하십시오. 두 메소드 모두 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....); }
-
==============================
3.
@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
UR1은 아래와 같아야합니다.
/ books? parameter1 = blah
이렇게하면 GET과 POST 모두에 사용할 수 있습니다.
from https://stackoverflow.com/questions/17987380/combine-get-and-post-request-methods-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 4.1에서 사용중인 Jackson ObjectMapper를 얻으려면 어떻게해야합니까? (0) | 2019.03.04 |
---|---|
[SPRING] Spring ApplicationListener가 이벤트를 수신하지 않습니다. (0) | 2019.03.04 |
[SPRING] 프로그래밍 방식으로 리소스 디렉터리 경로를 얻는 방법 (0) | 2019.03.04 |
[SPRING] 단위 테스트 또는 통합 테스트에 Spring의 MockMvc가 사용됩니까? (0) | 2019.03.04 |
[SPRING] Spring과 Hibernate를 사용하는 좋은 샘플 애플리케이션은 무엇인가? [닫은] (0) | 2019.03.04 |