2017-03-12 10 views
2

스프링 부트를 사용하여 새로운 사용자 등록을 처리하는 내 RegisterController에 몇 가지 방법이 있습니다.같은 컨트롤러에서 다른 메소드의 @RequestMapping 값을 얻으십시오.

createNewUser 메서드는 새 사용자를 데이터베이스에 저장하고 고유 토큰이있는 링크가 포함 된 확인 전자 메일을 보내는 작업입니다.

confirmUser 메서드는 확인 링크에 대한 GET 요청 처리를 처리합니다.

createNewUser 메서드의 @RequestMapping 값을 confirmUser에 할당하는 방법이 있습니까? 이 값을 하드 코딩 대신 확인 링크를 생성하는 데 사용하고 싶습니다.

// Process form input data 
@RequestMapping(value = "/register", method = RequestMethod.POST) 
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) { 

} 

// Process confirmation link 
// Link in confirmation e-mail will be /registerConfirmation?token=UUID 
@RequestMapping(value="/registerConfirmation", method = RequestMethod.GET) 
public ModelAndView confirmUser(@RequestParam("token") String token) { 

} 
+0

confirmUser 서비스를 createNewUser와 병합하지 않는 이유는 분명히 확인 응답을 반환하기 때문입니다. –

+0

@PratikAmbani confirmUser()는 사용자가 전자 메일의 확인 링크를 클릭 할 때만 호출되어야하기 때문입니다. createNewUser() 메소드는 등록 양식을 성공적으로 채운 것입니다. –

+0

BTW HTTP GET 요청에서 상태를 변경하는 것은 좋지 않습니다. DB에서 사용자 정보를 업데이트하여 확인했습니다. 따라서 'confirmUser'메서드를 HTTP POST로 변경하는 것이 좋습니다. . –

답변

1

은 내가 @RequestMapping 값에서 얻을 수있는 방법을 알고하지 않습니다하지만 당신은 다른 옵션의 몇 가지있다.

옵션 1 : 매핑에 대한 상수를 만들고 두 방법 모두에서이를 참조 할 수 있도록합니다.

private final static String REGISTER_CONF_VAL = "/registerConfirmation"; 

@RequestMapping(value = "/register", method = RequestMethod.POST) 
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) { 

} 

// Process confirmation link 
// Link in confirmation e-mail will be /registerConfirmation?token=UUID 
@RequestMapping(value=REGISTER_CONF_VAL, method = RequestMethod.GET) 
public ModelAndView confirmUser(@RequestParam("token") String token) { 

} 

옵션 2 : 당신은 당신의 설정 파일에 registerConfirmation을 추가하면 덜 적합하지만, 당신은 그것을 좋아에 액세스 할 수 있습니다

@RequestMapping(value="${register.conf.val}", method = RequestMethod.GET) 
public ModelAndView confirmUser(@RequestParam("token") String token) { 

} 

이 좋지 않은 이유는 아마하지 않기 때문에 환경에 따라 다를 수 있기를 바랍니다. 즉, 그것이 효과가있을 것이라고 말했다.

0

사용자 요청을 기반으로 링크를 생성해야하는 경우 컨트롤러에서 경로 변수를 사용할 수 있습니다. U는 경로 변수를 가져올 수 있으며 경로를 확인하는 메커니즘을 사용할 수 있습니다.

{registerConfirmation}으로 registerConfirmation을 바꾸고이 방법에서 @PathVariable 주석을 사용하여 경로를 가져옵니다. 변수를 사용하여 경로가 유효한지 확인하십시오.