programing

@RequestParam in Spring MVC에서 옵션 파라미터 처리

goodcopy 2022. 8. 23. 23:48
반응형

@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();
}

주의: 사용하지 마십시오.@AllArgsConstructorPOJO그렇지 않으면 필드가 null로 초기화됩니다.

언급URL : https://stackoverflow.com/questions/22373696/requestparam-in-spring-mvc-handling-optional-parameters

반응형