2016-06-21 14 views
1

私は以下のコントローラコードを持っています。springboot jacksonは適切なjsonオブジェクトの代わりに配列を返します

@RequestMapping(value = "/testService/test", produces = MediaType.APPLICATION_JSON_VALUE) 
public HttpEntity<TestBean> test(@RequestParam Map<String,String> testReq)  { 
... 
List<Test> objList=testRepository.test(); 
testBean.setObjects(objList); 
... 
return new ResponseEntity<TestBean>(testBean, HttpStatus.OK); 
} 

TestBeanが

@Entity 
@Table(name="TEST") 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Test implements Serializable{ 
private static final long serialVersionUID = -5319848003675140194L; 
@JsonIgnore 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="TEST_ID") 
Integer testId; 
... 

試験以下のように定義される

private List<Test> objects; 

Testクラス以下のような(ゲッター/セッター及び他のいくつかの属性を持つ)テストオブジェクトのリストを保持している()メソッド以下のように定義される。

@Query(value="SELECT ...", nativeQuery=true) 
List<Test> test(); 

私が見たJSON出力は大丈夫であること

{"requestId":"testRequestId","objects":[[1,"Test name"],[2,"Test name2"]],"status":"Success"} 

他のもの以下のように、私の質問は、なぜ出力されているオブジェクトのリストは、そのように代わりのこの

{"testId":1,"testName":"Test name"} 
のようなものですされています

私が使用している別の同様のオブジェクトについては、出力が期待どおり(正しいjson形式で)表示されています。

実際のコードはコピーされていませんが、変更された名前のコードが入力されていますので、コードに表示される構文エラーはすべて無視してください。

出力に適切なjsonを取得するにはどうすればよいですか?

+0

あなたの 'Test'クラスと' TestBean'クラスについてのさらなる情報が必要です。これらのクラスにジャクソンの注釈が含まれていますか?配列のシリアライゼーションは 'BeanAsArraySerializer'が使用されたときに発生します。これは特定の' @JsonFormat'アノテーションを持っている場合にアクティブになる可能性があります。 – g00glen00b

+0

それにもかかわらず、 'testId'フィールドに' @ JsonIgnore'アノテーションを追加したので、あなたのIDもその配列にあります。 – g00glen00b

+0

Testクラスには、すでに言及したもの以外の特別な注釈はありません。 以下は、TestBeanの唯一の注釈です。 '@JsonPropertyOrder({" requestId "、" objects "}) public class TestBeanは、ResourceSupport {' – Divyesh

答えて

1

問題が発生しました。問題は、別のオブジェクト用に作成されたJPAリポジトリ・クラスを使用していたことです。 Testオブジェクト用の新しいJPAリポジトリクラスを作成しましたが、今は正常に動作しています.Json出力が正しく形成されています。 ありがとう

関連する問題