복붙노트

[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. ==============================

    1.이름 및 암호 요청 매개 변수에도 required = false를 제공해야합니다. 그 이유는 logout 매개 변수 만 제공하면 이름과 암호가 필요하다는 것뿐 아니라 필수 매개 변수이기 때문입니다.

    이름 및 암호 요청 매개 변수에도 required = false를 제공해야합니다. 그 이유는 logout 매개 변수 만 제공하면 이름과 암호가 필요하다는 것뿐 아니라 필수 매개 변수이기 때문입니다.

    로그 아웃은 required = false가 이미 로그 아웃되어 있으므로 필수 매개 변수가 아니기 때문에 이름과 비밀번호를 제공 할 때만 작동했습니다.

  2. ==============================

    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. ==============================

    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 {...}
    
  4. from https://stackoverflow.com/questions/22373696/requestparam-in-spring-mvc-handling-optional-parameters by cc-by-sa and MIT license