2017-09-19 6 views
0

今回はとても混乱してしまいました... 私は春の起動(1.5.3)アプリケーションを開発中で、 hateoasライブラリ。いくつかのエンドポイントは既に正しく動作し、HALリンクを返す。現在、私はHALで応答を返すように別のエンドポイントを変更しようとしていますが、結果は"collection+json"スタイルでシリアル化されています。 春のコンテキストで3件のObjectMapperインスタンスがあります:HALスタイルのレンダリングで春の嫌いが発生する

  • objectMapper
  • _halObjectMapper
  • halObjectMapper

は、私はすべての3と応答を変換し、私がこれまでに見つかった何

これらは、最初の2つは、"collection+json"出力("links""rel")、3番目のものは期待されるHALスタイル("_links"なし、"rel"なし)を生成します。

なぜ3つありますか、どのようにこれらのobjectMappersがレスポンスのレンダリングに使用されるかを調べて制御するにはどうすればよいですか?私の他のエンドポイントがどのようにして予期したフォーマットを返すことが可能ですか?


ここに私の単純化されたコードは、それが任意の関心のだ場合には、です:応答は次のように見えるようになっている

@RestController 
public class SearchController{ 

    @RequestMapping(value = "/search", produces = { "application/hal+json" }, method = RequestMethod.GET) 
    public ResponseEntity<SearchResponse> search(...){ 
     SearchResponse searchResponse = ...; // search & build response 
     return new ResponseEntity<>(searchResponse, HttpStatus.OK); 
    } 
} 

public class SearchResponse { 

    @JsonProperty("_meta") 
    private PageSortInfo meta; 

    @JsonUnwrapped 
    private Resources<Resource<SearchResultItem>> resultlist; 

    ...// getters & setters 
} 

{ 
    "_meta" : { 
     ... 
    }, 
    "_embedded" : { 
     "searchResultItemList" : [ { 
     ..., 
     "_links" : { 
      "self" : { 
      "href" : "..." 
      } 
     } 
     }, 
     ... 
     ] 
    }, 
    "_links" : { 
     "self" : { 
     "href" : "http://localhost:8882/api/search" 
     } 
    } 
} 

答えて

0

まあ、を掘りの別の日の後Googleの検索結果、スプリントブートコードと多くの試行&エラー私は最終的には些細なことですが、もちろん答えを見つけた:

Springは、登録されたコンバーターをオブジェクトのタイプ(私の場合はSearchResponse)と応答タイプ(私にとっては"application/hal+json")と照合することによって、応答オブジェクトを適切なフォーマットに変換するために使用されるMessageConverterを選択します。 halJacksonHttpMessageConverterは、応答オブジェクトのタイプがResourceSupportの場合にのみ選択されます。私がしなければならなかったのは私です。SearchResponseResourceSupportです。私は期待される応答形式を持っています。

public class SearchResponse extends ResourceSupport {...} 
関連する問題