2016-06-21 119 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; 
... 

測試測試對象的列表(具有getter/setter方法和一些其他屬性),如下

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'類的信息。這些類中的任何一個是否包含Jackson註釋?數組序列化發生在使用'BeanAsArraySerializer'時,如果您有某些'@ JsonFormat'註釋可能會被激活。 – g00glen00b

+0

儘管如此,由於您在'testId'字段中添加了@ JsonIgnore註解(除非響應中的數字不同),所以您的ID也在該數組中是非常奇怪的。 – g00glen00b

+0

除了我已經提到的,Test類上沒有額外的註釋。 以下是TestBean唯一的註釋。 '@JsonPropertyOrder({「requestId」,「objects」}) public class TestBean extends ResourceSupport { – Divyesh

回答

1

我得到了問題。問題是我正在使用爲另一個對象創建的JPA存儲庫類。 我爲Test對象創建了一個新的JPA庫類,現在它工作正常,我正確地形成了json輸出。 謝謝

相關問題