[SPRING] 선택적 매개 변수를 처리하는 Spring MVC의 @RequestParam
SPRING선택적 매개 변수를 처리하는 Spring MVC의 @RequestParam
스프링 컨트롤러가 두 종류의 요청을 모두 처리 할 수 있습니까?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
내가 단일 컨트롤러를 정의한다면 :
@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,
produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
@RequestParam(value = "logout", required = false) String logout,
@RequestParam("name") String username,
@RequestParam("password") String password,
@ModelAttribute("submitModel") SubmitModel model,
BindingResult errors) throws LoginException {...}
"로그 아웃"을 포함한 HTTP 요청은 받아 들여지지 않습니다.
각각의 요청을 개별적으로 처리 할 두 개의 컨트롤러를 정의하면 Spring은 이미 "Controller 'bean method ... mapped가있다"라는 예외로 불평합니다.
해결법
-
==============================
1.이름 및 암호 요청 매개 변수에도 required = false를 제공해야합니다. 그 이유는 logout 매개 변수 만 제공하면 이름과 암호가 필요하다는 것뿐 아니라 필수 매개 변수이기 때문입니다.
이름 및 암호 요청 매개 변수에도 required = false를 제공해야합니다. 그 이유는 logout 매개 변수 만 제공하면 이름과 암호가 필요하다는 것뿐 아니라 필수 매개 변수이기 때문입니다.
로그 아웃은 required = false가 이미 로그 아웃되어 있으므로 필수 매개 변수가 아니기 때문에 이름과 비밀번호를 제공 할 때만 작동했습니다.
-
==============================
2.Spring 4.1.1부터는 Java 8 Optional (원래 티켓)을 완벽하게 지원하므로 예제에서는 3 개의 param logout을 위해 required = false를 Optional로 바꾸는 한 두 개의 요청이 모두 단일 매핑 끝점을 통해 전달됩니다. 이름, 암호 :
Spring 4.1.1부터는 Java 8 Optional (원래 티켓)을 완벽하게 지원하므로 예제에서는 3 개의 param logout을 위해 required = false를 Optional로 바꾸는 한 두 개의 요청이 모두 단일 매핑 끝점을 통해 전달됩니다. 이름, 암호 :
@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET, produces="text/xml") public String showLoginWindow(@PathVariable("id") String id, @RequestParam(value = "logout") Optional<String> logout, @RequestParam("name") Optional<String> username, @RequestParam("password") Optional<String> password, @ModelAttribute("submitModel") SubmitModel model, BindingResult errors) throws LoginException {...}
-
==============================
3.케이스를 처리하는 2 가지 메소드를 작성하십시오. @RequestMapping 주석에 요청을 매핑하는 동안 특정 매개 변수를 고려하도록 지시 할 수 있습니다. 그런 식으로 두 가지 방법으로 멋지게 나눌 수 있습니다.
케이스를 처리하는 2 가지 메소드를 작성하십시오. @RequestMapping 주석에 요청을 매핑하는 동안 특정 매개 변수를 고려하도록 지시 할 수 있습니다. 그런 식으로 두 가지 방법으로 멋지게 나눌 수 있습니다.
@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET, produces="text/xml", params={"logout"}) public String handleLogout(@PathVariable("id") String id, @RequestParam("logout") String logout) { ... } @RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET, produces="text/xml", params={"name", "password"}) public String handleLogin(@PathVariable("id") String id, @RequestParam("name") String username, @RequestParam("password") String password, @ModelAttribute("submitModel") SubmitModel model, BindingResult errors) throws LoginException {...}
from https://stackoverflow.com/questions/22373696/requestparam-in-spring-mvc-handling-optional-parameters by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] javax.servlet.ServletException을 스프링 웹 앱의 유형으로 해결할 수 없습니다. (0) | 2019.01.25 |
---|---|
[SPRING] Eclipse에서 Spring MVC 프로젝트를 어떻게 만듭니 까? (0) | 2019.01.25 |
[SPRING] Spring @Autowire on Properties 대 생성자 (0) | 2019.01.25 |
[SPRING] Spring 3.0 MVC @ModelAttribute 변수가 URL에 나타나지 않게하려면 어떻게합니까? (0) | 2019.01.25 |
[SPRING] 의존성 주입을 제대로하는 법 (Spring)? [복제] (0) | 2019.01.25 |