2016-03-31 35 views
0

我是Spring的新手,我正在處理奇怪的行爲,當我從API獲取json響應時,我沒有獲取屬性名稱,只是值。我怎麼可能找到什麼阻止propertyName返回響應?Spring Rest Api Json響應不顯示屬性名稱

電流響應:

[ 
    [ 
    "6ED569AAE51C401CB621E96856766BF4", 
    "{\"EventType\":\"Test\",\"lastName\":\"Smith\",\"age\":25,\"address\":{\"streetAddress\":\"212ndStreet\",\"city\":\"NewYork\",\"state\":\"NY\",\"postalCode\":\"10021\"}}", 
    "{\"EventType\":\"Test\",\"lastName\":\"Smith\",\"age\":25,\"address\":{\"streetAddress\":\"212ndStreet\",\"city\":\"NewYork\",\"state\":\"NY\",\"postalCode\":\"10021\"}}", 
    "JPA_USER", 
    1459372275949, 
    "JPA_USER", 
    1459372275949, 
    "A", 
    "UPJPATESTEVENT", 
    "8210D1C62E014F158859EC0D034435BC" 
    ] 
] 

但是正確的反應會隨着像屬性名稱:

[ 
    [ 
    "refEventTypeId":"6ED569AAE51C401CB621E96856766BF4", 
    "jsonExampleDocument":"{\"EventType\":\"Test\",\"lastName\":\"Smith\",\"age\":25,\"address\":{\"streetAddress\":\"212ndStreet\",\"city\":\"NewYork\",\"state\":\"NY\",\"postalCode\":\"10021\"}}", 
    "jsonAvroSchema":"{\"EventType\":\"Test\",\"lastName\":\"Smith\",\"age\":25,\"address\":{\"streetAddress\":\"212ndStreet\",\"city\":\"NewYork\",\"state\":\"NY\",\"postalCode\":\"10021\"}}", 
    "createUser":"JPA_USER", 
    "createDate":1459372275949, 
    "updateUser":"JPA_USER", 
    "updateDate":1459372275949, 
    "status":"A", 
    "eventType":"UPJPATESTEVENT", 
    "tenantId":"8210D1C62E014F158859EC0D034435BC" 
    ] 
] 

控制器:

@ResponseBody 
@RequestMapping(value = "/abc", method = RequestMethod.GET, produces = "application/json") 
public List<EventORM> getAllEvents2(@RequestParam(value = "status", required = false) String status) throws SQLException {       

    List<EventORM> event = eventManager.getAllEvents(status); 

    return event; 
} 

我也在控制器,但我使用ResponseEntity嘗試仍然得到相同的結果:

@ResponseBody 
    @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json") 
    public ResponseEntity<List<EventORM>> getAllEvents(@RequestParam(value = "status", required = false) String status) throws SQLException {       

     List<EventORM> event = eventManager.getAllEvents(status); 

     return new ResponseEntity<List<EventORM>>(event, HttpStatus.OK); 
    } 

DAOImpl:

public List<EventORM> getAllEvents(String status) { 

    StringBuilder sql = new StringBuilder(); 
    sql.append("SELECT refEventTypeId, jsonExampleDocument, jsonAvroSchema, createUser, createDate, updateUser, updateDate, status, eventType, tenantId FROM EventORM event"); 

    Query queryEvents = entityManager.createQuery(sql.toString());   

    return queryEvents.getResultList(); 
} 

型號:

package com.epsilon.al.ml.dao.orm.model; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

import com.epsilon.al.ml.commons.AuditModelORM; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 

@Entity 
@Table(name = "T_REF_EVENT_TYPE", schema = "MI_DEV_USER") 
public class EventORM extends AuditModelORM implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 471512149777116797L; 

    @Column(name = "REF_EVENT_TYPE_ID") 
    @Id 
    private String refEventTypeId; 

    @Column(name = "JSON_EXAMPLE_DOCUMENT") 
    private String jsonExampleDocument; 

    @Column(name = "JSON_AVRO_SCHEMA") 
    private String jsonAvroSchema;  

    @Column(name = "EVENT_TYPE") 
    private String eventType; 

    @Column(name = "TENANT_ID") 
    private String tenantId; 

    public String getEventType() { 
     return eventType; 
    } 

    public void setEventType(String eventType) { 
     this.eventType = eventType; 
    } 

    public String getTenantId() { 
     return tenantId; 
    } 

    public void setTenantId(String tenantId) { 
     this.tenantId = tenantId; 
    } 

    public String getRefEventTypeId() { 
     return refEventTypeId; 
    } 

    public void setRefEventTypeId(String refEventTypeId) { 
     this.refEventTypeId = refEventTypeId; 
    } 

    public String getJsonExampleDocument() { 
     return jsonExampleDocument; 
    } 

    public void setJsonExampleDocument(String jsonExampleDocument) { 
     this.jsonExampleDocument = jsonExampleDocument; 
    } 

    public String getJsonAvroSchema() { 
     return jsonAvroSchema; 
    } 

    public void setJsonAvroSchema(String jsonAvroSchema) { 
     this.jsonAvroSchema = jsonAvroSchema; 
    } 

    @Override 
    public String toString() { 
     return "EventORM [refEventTypeId=" + refEventTypeId + ", jsonExampleDocument=" + jsonExampleDocument 
       + ", jsonAvroSchema=" + jsonAvroSchema + ", createUser=" + getCreateUser() + ", createDate=" + getCreateDate() 
       + ", updateUser=" + getUpdateUser() + ", updateDate=" + getUpdateDate() + ", status=" + getStatus() + ", eventType=" 
       + eventType + ", tenantId=" + tenantId + "]"; 
    } 

} 

謝謝!

答案在我的情況:

TypedQuery<EventORM> queryEvents = entityManager.createQuery(sql.toString(), EventORM.class); 
+0

嘗試在您的POM添加這種依賴性: ' org.codehaus.jackson 傑克遜映射器 - 翔升 1.9。10 ' 並把剛@ResponseBody ** **之前你的方法的返回(...名單@ResponseBody ... ) –

回答

2

你的問題出在下面的代碼,

StringBuilder sql = new StringBuilder(); 
sql.append("SELECT refEventTypeId, jsonExampleDocument, jsonAvroSchema, createUser, createDate, updateUser, updateDate, status, eventType, tenantId FROM EventORM event"); 
Query queryEvents = entityManager.createQuery(sql.toString()); 

隨着HQL你現在選擇特定的領域,這樣的結果會以列表返回的值對應於這些字段。這與轉換字符串列表相同。

解決辦法是,

在如下createQuery方法指定類型,

sql.append("SELECT event FROM EventORM event"); 
return entityManager.createQuery(sql.toString(), EventORM.class); 

或者,如果你不希望只選擇一組特定的領域

創建一個新的POJO(即EventDomDTO放在您合適的DTO包裝中)並修改查詢使用EventDomDTO和您所選的字段

sql.append("SELECT new com.epsilon.al.ml.dao.orm.EventDomDTO(refEventTypeId, jsonExampleDocument, jsonAvroSchema, createUser, createDate, updateUser, updateDate, status, eventType, tenantId) FROM EventORM event"); 
return entityManager.createQuery(sql.toString(), EventDomDTO.class); 

注意用第二種方法,你必須改變方法簽名爲getAllEvents

public List<EventDomDTO> getAllEvents(String status) 

因爲現在你返回一個自定義的POJO類。

希望這會幫助你。

+0

感謝您抽出時間來回答了很多Bunti。我已經實施了第一種方法,幫助了我很多! – Ani