2017-04-11 12 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では、異なるドメインモデルのMedia Typesと同じURIをマップすることはできません。どのように私はそれを達成することができますか?何か不足していますか?

多くのおかげ :O)

答えて

0

コンテンツタイプがまだ同じapplication/jsonですのでです。 Content-Typeを見てくださいsyntax domain-model=CommandOneとして渡すものは単なるパラメータであり、Springは異なるメソッドを呼び出すための違いとして認識しません。これが答え Does HTTP content negotiation respect media type parameters

に詳細に記載されている

これは、春のチームにBUGとして提出が、彼らは、「設計どおりの作業」で閉じました。

残念ながら、現在のところSpringはこのケースを処理できません。