2017-04-11 10 views
1

이 기사에 설명 된대로 내가, 미디어 유형의 5 단계를 사용하여 도메인 기반의 설계 원칙에 내 REST API를 CQRS의 원칙을 적용하려고 : https://www.infoq.com/articles/rest-api-on-cqrs http://byterot.blogspot.ch/2012/12/5-levels-of-media-type-rest-csds.html5 단계 봄 REST

내 기술 컨텍스트는 Spring REST 프레임 워크 버전 3.2입니다.

기본적으로 다른 "도메인 모델"미디어 유형을 사용하여 내 명령을 매핑 할 수 있어야합니다. 이다

PUT /resources/123 
Content-Type: application/json;domain-model=CommandOne 

오류 :

@Controller 
@RequestMapping("resources") 
public class MyController { 

    @RequestMapping(value = "{id}", method = RequestMethod.PUT, consumes = "application/json;domain-model=CommandOne") 
    @ResponseBody 
    public void commandOne(@PathVariable Long id, @RequestBody CommandOne commandOne) { 
     LOG.info("Using command {}", commandOne); 
    } 

    @RequestMapping(value = "{id}", method = RequestMethod.PUT, consumes = "application/json;domain-model=CommandTwo") 
    @ResponseBody 
    public void commandTwo(@PathVariable Long id, @RequestBody CommandTwo commandTwo) { 
     LOG.info("Using command {}", commandTwo); 
    } 

} 

문제가있는 PUT에 대한 요청할 때, 나는 매핑 오류가 점점 오전 : 따라서, 나는 다음과 같은 매핑이 일을 기대

java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path ... 

Spring은 다른 도메인 모델의 미디어 유형과 동일한 URI를 매핑 할 수 없습니다. 어떤 생각을 어떻게 할 수 있을까요? 내가 놓친 게 있니?

많은 감사 : O)

답변

0

콘텐츠 형식 여전히 같은 application/json이기 때문입니다. 내용 유형을 확인하십시오 syntax domain-model=CommandOne으로 전달하는 것은 매개 변수 일 뿐이며 Spring은 다른 메소드를 호출하기 위해 차이점으로 인식하지 못합니다.

는 대답 Does HTTP content negotiation respect media type parameters

이것은 봄 팀에 BUG로 제출했지만 "설계된대로 작동"그들은 폐쇄에 자세히 설명되어 있습니다.

불행히도 현재 스프링은이 사건을 처리 할 수 ​​없습니다.