2016-03-18 141 views
1

我有一個用戶列表類和一個API,返回用戶列表和總記錄。 類如下:傑克遜傑克遜不爲嵌套對象創建json

@JsonInclude(JsonInclude.Include.NON_NULL) 
public class FMSResponseInfo { 

    @JsonProperty("status") 
    private String status; 
    @JsonProperty("message") 
    private String message; 
    @JsonProperty("data") 
    private Object data; 

    @JsonProperty("status") 
    public String getStatus() { 
     return status; 
    } 

    @JsonProperty("status") 
    public void setStatus(String status) { 
     this.status = status; 
    } 

    @JsonProperty("message") 
    public String getMessage() { 
     return message; 
    } 

    @JsonProperty("message") 
    public void setMessage(String message) { 
     this.message = message; 
    } 

    @JsonProperty("data") 
    public Object getData() { 
     return data; 
    } 

    @JsonProperty("data") 
    public void setData(Object data) { 
     this.data = data; 
    } 
} 

@JsonInclude(JsonInclude.Include.NON_NULL) 
public class UserListResDTO { 

    @JsonProperty("users") 
    private List<UserDTO> users; 
    @JsonProperty("totalRecords") 
    private long totalRecords; 

    public List<UserDTO> getUsers() { 
     return users; 
    } 
    public void setUsers(List<UserDTO> users) { 
     this.users = users; 
    } 
    public long getTotalRecords() { 
     return totalRecords; 
    } 
    public void setTotalRecords(long totalRecords) { 
     this.totalRecords = totalRecords; 
    } 
} 

我設置在FMSResponseInfo類型UserListResDTO的目的,如下所示。

到目前爲止,我已經成功地創建了Web服務並將響應作爲json返回。但我面臨的問題是API返回響應如下: {「data」:「[email protected]」,「message」:「Success」,「status」:「200」}

而且這是我寫的Web服務:

@Path("/getUsers") 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public FMSResponseInfo getUsers(@QueryParam("page") @DefaultValue("0") int page) { 
     System.out.println("In getUsers()"); 
     FMSResponseInfo fmsResponseInfo = new FMSResponseInfo(); 
     try { 
      UserListResDTO userList = fmsUserManager.getAllUsers(page); 
      fmsResponseInfo.setData(userList); 
      fmsResponseInfo.setStatus(FMSErrorMessageEnum.SUCCESS_CODE.getValue()); 
      fmsResponseInfo.setMessage(FMSErrorMessageEnum.SUCCESS_MESSAGE.getValue()); 
     } catch (Exception e) { 
      return FMSUtil.getErrorResponseInfo(FMSErrorMessageEnum.INTERNAL_SERVER_ERROR_CODE.getValue(), 
        e.getMessage()); 
     } 
     System.out.println("Out getUsers()"); 
     return fmsResponseInfo; 
    } 

我想有一些問題,我無法解析的依賴關係什麼的。在我的聚甲醛主要依賴是:

 <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.7.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.7.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-moxy</artifactId> 
     </dependency> 

,我通過擴展應用程序類如下創建Web服務:

@ApplicationPath("rest") 
public class FMSApplication extends Application {  
    public Set<Class<?>> getClasses(){ 
     Set<Class<?>> set = new HashSet<Class<?>>(); 
     set.add(FMSUserManagerWebService.class); 
     set.add(FMSDocumentManagerWebService.class); 
     set.add(FMSInboxManagerWebService.class); 
     set.add(FMSLocationManagerWebService.class); 
     return set; 
    }  
} 

任何幫助會我是新來這個REST Web服務是非常讚賞和已經陷入了相當長的時間。

+0

我已經添加了Web服務的代碼現在,你可以請檢查並建議是什麼問題? –

+0

請包含FMSResponseInfo的代碼。 – BPS

+1

你可以把mox改成傑克遜試試嗎? org.glassfish.jersey.media 新澤西媒體JSON - 傑克遜 2.22.2

回答

2

此鏈接將解釋答案

https://jersey.java.net/documentation/latest/media.html#d0e7963

9.1。 1.1。 POJO支持

POJO支持表示將Java對象 轉換爲JSON並返回的最簡單方法。支持這種做法

媒體模塊是莫西和傑克遜

傑克遜的鏈接包括

9.1.4.1。依賴

要使用傑克遜作爲2.X的JSON提供你需要 球衣,媒體JSON - 傑克遜模塊添加到您的pom.xml文件

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.22.2</version> 
</dependency> 

我不很瞭解mox,但是你在CLASSPATH上有jackson,並且使用了Jackson的annonations。澤西然而被配置使用moxy。

從鏈接

JSON通過莫西綁定的支持是默認和支持 JSON,因爲澤西2.0在新澤西的應用程序綁定首選方式。 當JSON MOXy模塊位於類路徑上時,Jersey會自動發現 發現模塊並通過 MOXy在您的應用中無縫啓用JSON綁定支持。

MOXy似乎已經處理了FMSResponseInfo。爲什麼它不處理我不知道的另一個對象。但既然你想使用傑克遜,你應該使用傑克遜模塊。

0

如使用以下依賴我是能夠解決問題的意見建議由郡政府駐地:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.22.2</version> 
</dependency>