@RequestParam in Spring MVC에서 옵션 파라미터 처리
스프링 컨트롤러는 두 가지 요구를 모두 처리할 수 있습니까?
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 {...}
"logout"을 가진 HTTP 요청은 받아들여지지 않습니다.
각 요청을 개별적으로 처리하기 위해 2개의 컨트롤러를 정의하면 스프링은 "There is aready 'Controller' bean method ... mapped"라는 예외와 함께 불만을 제기합니다.
주셔야 합니다.required = false
위해서name
그리고.password
파라미터도 요구합니다.그 이유는, 당신이 단지 그 정보를 제공할 때,logout
파라미터, 실제로 예측되는 것은name
그리고.password
그리고 그것들은 여전히 의무사항입니다.
네가 그냥 줬을 때 효과가 있었어name
그리고.password
왜냐면logout
필수 파라미터가 아닌 이유는required = false
이미 주어진logout
.
의 일부로서Spring 4.1.1
이제 Java 8을 완전히 지원하게 되었습니다.Optional
(원래 티켓) 따라서 이 예에서는 두 요구 모두 교환이 필요한 한 단일 매핑엔드포인트를 경유합니다required=false
옵션에서 3개의 파라미터 로그아웃, 이름, 비밀번호:
@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 {...}
사례를 처리하는 두 가지 방법을 만듭니다.명령할 수 있습니다.@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 {...}
다른 사용자가 매핑을 찾고 있는 경우 옵션 매개 변수:Pojo
, 다음과 같이 할 수 있습니다.
@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,
produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
LoginRequest loginRequest,
@ModelAttribute("submitModel") SubmitModel model,
BindingResult errors) throws LoginException {...}
@Data
@NoArgsConstructor
//@AllArgsConstructor - Don't use this
public class LoginRequest {
private Optional<String> logout = Optional.empty();
private Optional<String> username = Optional.empty();
private Optional<String> password = Optional.empty();
}
주의: 사용하지 마십시오.@AllArgsConstructor
에POJO
그렇지 않으면 필드가 null로 초기화됩니다.
언급URL : https://stackoverflow.com/questions/22373696/requestparam-in-spring-mvc-handling-optional-parameters
'programing' 카테고리의 다른 글
Java의 최종 블록에서 돌아오다 (0) | 2022.08.23 |
---|---|
Passport를 사용하여 API 호출에서 laravel_token을 새로 고치는 방법 (0) | 2022.08.23 |
Absolute 파일 경로를 포함하는 문자열에서 파일 이름을 가져오려면 어떻게 해야 합니까? (0) | 2022.08.16 |
"number of bytes"를 0으로 설정하고 memcpy()와 memmove()를 호출할 수 있습니까? (0) | 2022.08.16 |
Where to get "UTF-8" string literal in Java? (0) | 2022.08.16 |