2016-03-18 20 views
1

私はユーザリストクラスとユーザリストと総レコードを返すAPIを持っています。 次のようにクラスがある:以下に示すように、私はFMSResponseInfoで型UserListResDTOのオブジェクトを設定していますjsonsonはネストされたオブジェクトの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; 
    } 
} 

私はこれまで、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> 

と、私は次のようにApplicationクラスを拡張することで、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

moxyをjacksonに変更して試してみませんか? 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に変換して戻す最も簡単な方法を表します。このアプローチをサポート

メディアモジュールはMOXY、ジャクソン

あるジャクソンへのリンクが

9.1.4.1が含まれています。依存関係

あなたのJSONプロバイダーとしてジャクソン2.xのを使用するには、あなたのpom.xmlファイルに ジャージメディア-JSON-ジャクソンモジュールを追加する必要が

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

私は、について多くを知りませんあなたはあなたのCLASSPATHにjacksonを持っていて、Jacksonのannonationsを使っていました。しかしジャージーはモキシーを使うように構成されていた。リンクから

はMOXY経由

JSONバインディングサポートがデフォルトとジャージー2.0以降にジャージーのアプリケーションに結合JSONをサポート の好ましい方法です。 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> 
関連する問題