2016-03-23 24 views
0

Jersey2とSpringを使用してREST APIを作成しています。結果のJSON式をより具体的なものにフォーマットしたいと思います.POJOの構造を変更する必要があるかどうかわかりません。 ressource形式JSON結果の式

実際のJSONに応答をフォーマット

Response [ { 
    "rcId" : 22900, 
    "posId" : 595, 
    "status" : "PERC6", 
    "dateFrom" : 1438380000000, 
    "dateTo" : 1442095200000, 
    "creaDate" : 1442349754000 
    "createdBy": "52e28419-2c48-526d-8e7c-783cf331e071", 
    "modifiedBy": "52e28419-1725-84bd-9884-6969e7b9b876", 
} ] 

は私のオブジェクトがこの

のように見えるフォーマットされたJSON

Response [ { 
    “results”: { 
     "rcId" : 22900, 
     "posId" : 595, 
     "status" : "PERC6", 
     "dateFrom" : 1438380000000, 
     "dateTo" : 1442095200000, 
     "creaDate" : 1442349754000 
     "createdBy": "52e28419-2c48-526d-8e7c-783cf331e071", 
     "modifiedBy": "52e28419-1725-84bd-9884-6969e7b9b876", 
    } 
    "related": { 
     "52e28419-2c48-526d-8e7c-783cf331e071": { "user/username" : "test" } 
     "52e28419-1725-84bd-9884-6969e7b9b876": { “user/username” : “test” } 
    } 
    "errors": [ ... If errors while executing query... ] 
} 

を募集

@Entity 
@Table(name="STATUS") 
@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class RcPosStatus implements Serializable { 

private static final long serialVersionUID = -8039686696076337853L; 

@Id 
@Column(name="RC_ID") 
@XmlElement(name = "RC_ID") 
private Long rcId; 

@Column(name="POS_ID") 
@XmlElement(name = "POS_ID")  
private Long posId; 

@Column(name="STATUS") 
@XmlElement(name = "STATUS")  
private String status; 


@Column(name="DATE_FROM") 
@XmlElement(name = "DATE_FROM") 
private Date dateFrom; 

@Column(name="DATE_TO") 
@XmlElement(name = "DATE_TO") 
private Date dateTo; 

@Column(name="CREA_DATE") 
@XmlElement(name = "CREATION_DATE") 
private Date creaDate; 

マイリソース

@GET 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public List<RcPosStatus> getRcPosStatus(
     @QueryParam("orderByInsertionDate") String orderByInsertionDate, 
     @QueryParam("numberDaysToLookBack") Integer numberDaysToLookBack) 
     throws IOException, AppException { 
      List<RcPosStatus> status = statusService.getRcPosStatus(
      orderByInsertionDate, numberDaysToLookBack); 
    return status; 
} 

答えて

0

私はあなたのDTO(データ転送オブジェクト)を作成お勧めします。 RESTエンドポイントの結果を表すようにデータ・モデルを変更すべきではありません。その理由は、クライアントの要件が時間の経過とともに変化し、安定したソリッドモデルを持つことが重要なためです。今、あなたは

... //fetches data from resources and starting to map response. 
DefaultResponseDTO<Pojo, Pojo> response = new DefaultResponseDTO(); 
response.results = results; //some results you want to return, Entities 
response.related = releated; //some results you want to return as related, Entities 
response.errors = errors; 
return response; 
をするレスポンスを作成するためにそれを使用して

public class DefaultResponseDTO<Foo, Bar> implements Serializable { 
    private ArrayList<Foo> results; 
    private ArrayList<Bar> related; 
    private ArrayList<Errors> errors; 
    ... 
} 

:私は正しいモデルを理解していれば

は、それはあなたがのDTOを整理する方法をアーキテクチャの問題です

は、ここでの例であります

ジェネリックスを使用すると、ニーズに合わせたデフォルトのレスポンスを作成し、きれいできちんとしたAPIを維持するのに役立ちます。私が使用したいリストオブジェクトは、クライアントでページングのために使用するリストに関するメタデータです。http://pastebin.com/mTU4qbc7

+0

Tkx Gulbrandsenは、私が探していたものです – kyserslick