2016-05-25 4 views
0

の応答フィールドを文書化しますは、どのように私はこのようなオブジェクトを返すRESTサービスのドキュメントをやっているマップ(HashMapの)などのオブジェクト

Map<String, HashMap<Long, String>> 

と私は、そのようなオブジェクトの応答フィールドを記述する方法を見つけることはありません。

私のコードを見てみましょう。

サービス:

@RequestMapping(value = "/data", method = RequestMethod.GET) 
public Map<String, HashMap<Long, String>> getData() 
{ 
Map<String, HashMap<Long, String>> list = dao.getData(); 
return list; 
} 

私のユニット・テストベースのドキュメント:私はのためのすべてのソリューションを持っていなかったので、

@Test 
    public void testData() throws Exception 
    { 
    TestUtils.beginTestLog(log, "testData"); 

    RestDocumentationResultHandler document = document(SNIPPET_NAME_PATTERN ,preprocessResponse(prettyPrint()));  
    document.snippets(
//  ,responseFields(
//   fieldWithPath("key").description("key description").type("String"), 
//   fieldWithPath("value").description("value as a Hashmap").type("String"), 
//   fieldWithPath("value.key").description("value.key description").type("String"), 
//   fieldWithPath("value.value").description("value.value description").type("String"), 
//  ) 

     String token = TestUtils.performLogin(mockMvc, "user", "password"); 

    mockMvc 
    .perform(get(APP_BUILD_NAME + "/svc/data").contextPath(APP_BUILD_NAME) 
     .header("TOKEN", token) 
    ) 
    .andExpect(status().is(200)) 
    .andExpect(content().contentType("application/json;charset=UTF-8")) 
    .andExpect(jsonPath("$").isMap()) 
    .andDo(document); 

    TestUtils.endTestLog(log, "testData"); 
} 

レスポンス・フィールドのコードを見ることができるようにコメントアウトされそれはまだ。私はそれに取り組んでいますが、本当にあなたの助けに感謝します。前もって感謝します。

+0

文書化しようとしているJSONの外観はどうなっていますか? –

+0

このリンクのJSONを見てください: https://dl.dropboxusercontent.com/u/64513069/JSONData_Translation.txt データは大きいですが、私はちょうどオブジェクトマップの3つの事を文書化する必要があると思います> –

+0

こんにちはAndy、 オブジェクトリストの応答フィールドの説明を作成できます。これは以前のようにMAPではなくListを使って変更する必要があります。しかし問題は、MAPが必要なことです。レスポンスフィールドの説明にMAPを使用できるかどうかについては、おそらくあなたの意見を共有できますか? これが不可能な場合は、応答フィールドの説明をスキップして他の解決策を考え出すことができます。前もって感謝します。 –

答えて

0

は、2つのオプションがあります。

1>レスポンスフィールドを簡単に説明することができるようにオブジェクトのリストにMAPを変更します。

2>説明をindex.adocファイルに手動で入力する。

私の場合、MAPに固執しなければならないので、私はオプション2に行きます。

3

JSONには膨大な数のフィールドがあります。地図には1000種類以上のエントリーがあるようです。これらのエントリのそれぞれは、それ自身が単一のキーと値のペアを持つマップです。それらのキーはすべて同様に変化するように見えます。

  • cancel
  • cancel.56284
  • year
  • year.41685
  • segment_de_clientele
  • segment_de_clientele.120705
  • :潜在的に、それはあなたの文書に2000以上のフィールドを提供します

この構造は文書化が困難であり、クライアントが消費するのが困難であることを示す強力な指標です。理想的には、JSONを再構成して、各エントリが同じキーを持ち、エントリからエントリまでの値が異なるようにします。例えば、このような何か、:

{ 
    "translations": [ { 
    "name": "cancel", 
    "id": 56284, 
    "text": "Exit" 
    }, { 
    "name": "year", 
    "id": 41685, 
    "text": "Year" 
    }, { 
    "name": "segment_de_clientele", 
    "id": 120705, 
    "text": "Client segment" 
    }] 
} 

これは、あなただけの文書にフィールドの一握りを持っていることを意味します:

  • translations[]
  • translations[].name
  • translations[].id
  • translations[].text

これが不可能な場合は、レスポンスのスニペットを使用してレスポンスの構造を文書化するのをやめます。代わりに、メインのAsciidoctorソースファイルにその構造を手動で記述する必要があります。

+0

本当にありがとうございます。あなたのソリューションは素晴らしいですが、返されたオブジェクトをMap >からに変更する必要があり、Mapを使用する目的はListとは異なります。このようなMapオブジェクトを文書化する方法があるかどうかを尋ねたいと思います。私は、たとえば、名前、ID、およびテストが文書化されていることを意味します。あなたはデータが巨大だと言いましたが、マップでは私が記録したいと思っている3つのフィールドを気にしています。 –

関連する問題