2016-03-31 33 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