[SPRING] 스프링 웹 MVC : 요청 매개 변수와 경로 변수에 동일한 요청 매핑 사용
SPRING스프링 웹 MVC : 요청 매개 변수와 경로 변수에 동일한 요청 매핑 사용
Spring 웹 MVC 컨트롤러 메소드가 URI 경로의 일부로 ID를 전달하는 요청과 일치해야한다는 것을 표현하는 방법이 있나요?
@RequestMapping(method=RequestMethod.GET, value="campaigns/{id}")
public String getCampaignDetails(Model model, @PathVariable("id") Long id) {
... 또는 클라이언트가 ID로 스타일의 HTTP 요청 매개 변수로 보내는 경우 ...
@RequestMapping(method=RequestMethod.GET, value="campaigns")
public String getCampaignDetails(Model model, @RequestParam("id") Long id) {
이것은 나에게 중복 코드를 추가하고 싶지 않은 꽤 일반적인 실제 URL 스키마 인 것처럼 보이지만 아직 답을 찾을 수 없었습니다. 어떤 조언을 환영합니다.
편집 : 현재 (봄 MVC <= 3.0)이 달성 할 수있는 방법으로 보인다, Javi 응답 내의 토론을 참조하십시오.
해결법
-
==============================
1.동일한 함수에 대한 매핑 URL과 설정 ID를 모두 선택적으로 설정할 수 있습니다.
동일한 함수에 대한 매핑 URL과 설정 ID를 모두 선택적으로 설정할 수 있습니다.
@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) public String getCampaignDetails(Model model, @RequestParam(value="id", required=false) Long id, @PathVariable("id") Long id2) { }
id가 보내지지 않을 때도 맵핑되지만, 메소드 내에서 이것을 제어 할 수 있습니다.
편집 : 이전 해결책은 @PathVariable이 {null}이 아니고 URL을 매핑 할 수 없을 때 null로 설정되지 않았기 때문에 작동하지 않습니다 (thanks ngeek). 가능한 유일한 해결책은 각각의 @MappingRequest로 매핑 된 두 개의 메소드를 생성하고 그 중 하나는 다른 함수를 호출하거나 다른 URL로 리디렉션하는 것입니다 (리디렉션 또는 전달 : 스프링 접두사). 나는이 해결책이 당신이 찾고있는 것이 아니지만 당신이 할 수있는 최선이라고 생각합니다. 실제로 코드를 복제하는 것이 아니라 다른 URL을 처리하는 또 다른 함수를 만드는 중입니다.
-
==============================
2.여전히 PathVariable 접근 방식을 고수하고 400 구문 적으로 잘못된 오류가 발생하는 경우이 접근 방식을 따르십시오.
여전히 PathVariable 접근 방식을 고수하고 400 구문 적으로 잘못된 오류가 발생하는 경우이 접근 방식을 따르십시오.
@RequestMapping(method=RequestMethod.GET, value={"campaigns/{id}","campaigns"}) public String getCampaignDetails(Model model, @PathVariable Map<String, String> pathVariables) { System.out.println(pathVariables.get("id")); }
-
==============================
3.@RequestMapping 어노테이션은 이제 이름이나 값 대신 경로 속성을 설정할 수 있습니다. 경로를 사용하면이 질문에서 원하는 매핑을 얻을 수 있습니다.
@RequestMapping 어노테이션은 이제 이름이나 값 대신 경로 속성을 설정할 수 있습니다. 경로를 사용하면이 질문에서 원하는 매핑을 얻을 수 있습니다.
@RequestMapping(method=RequestMethod.GET, path="campaigns/{id}") public String getCampaignDetails(Model model, @PathVariable("id") Long id) { @RequestMapping(method=RequestMethod.GET, value="campaigns") public String getCampaignDetails(Model model, @RequestParam("id") Long id) {
from https://stackoverflow.com/questions/2745471/spring-web-mvc-use-same-request-mapping-for-request-parameter-and-path-variable by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 데이터 JPA - 업데이트 쿼리 수정 - 지속성 컨텍스트 새로 고침 (0) | 2019.01.26 |
---|---|
[SPRING] HandlerInterceptorAdapter에서 서비스를 Autowire 할 수 없습니다. [duplicate] (0) | 2019.01.26 |
[SPRING] Spring 트랜잭션에서 requires_new와 nested propagation 사이의 차이점 (0) | 2019.01.26 |
[SPRING] 봄 3 autowiring 및 junit 테스트 (0) | 2019.01.25 |
[SPRING] Spring-Security의 기본 AuthenticationManager는 무엇입니까? 인증 방법은 무엇입니까? (0) | 2019.01.25 |