私は以下のコントローラコードを持っています。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を取得するにはどうすればよいですか?
あなたの 'Test'クラスと' TestBean'クラスについてのさらなる情報が必要です。これらのクラスにジャクソンの注釈が含まれていますか?配列のシリアライゼーションは 'BeanAsArraySerializer'が使用されたときに発生します。これは特定の' @JsonFormat'アノテーションを持っている場合にアクティブになる可能性があります。 – g00glen00b
それにもかかわらず、 'testId'フィールドに' @ JsonIgnore'アノテーションを追加したので、あなたのIDもその配列にあります。 – g00glen00b
Testクラスには、すでに言及したもの以外の特別な注釈はありません。 以下は、TestBeanの唯一の注釈です。 '@JsonPropertyOrder({" requestId "、" objects "}) public class TestBeanは、ResourceSupport {' – Divyesh