2017-11-08 13 views
0

JerseyでREST-APIを作成しています。これを行うには、PluralSightのコースに従っています。Jersey-media-moxy:APPLICATION_JSON @XmlElementアノテーションを無視する

jersey-media-moxy依存関係(v2.26)を使用してJersey 2.2をインストールしました。私は、JSONに解析することが返されて、次のリソースがあります。

@XmlRootElement 
public class Playlist { 
    private int id; 
    private String naam; 
    private int eigenaarID; 
    private Boolean owner; 

    public void setData(int id, String naam, int eigenaarID) { 
     this.id = id; 
     this.naam = naam; 
     this.eigenaarID = eigenaarID; 

     if(eigenaarID == 0) { 
      owner = false; 
     } else { 
      owner = true; 
     } 
    } 

    @XmlElement(name="id") 
    public int getID() { 
     return id; 
    } 

    @XmlElement(name="name") 
    public String getNaam() { 
     return naam; 
    } 

    public Boolean getOwner() { 
     if(eigenaarID == 0) { 
      return false; 
     } 
     return true; 
    } 

    public ArrayList<Track> getTracks(){ 
     return new ArrayList<Track>(); 
    } 
} 

を(@Produces(MediaType.APPLICATION_XML)付き)I出力XMLた場合は、「getNaam」のプロパティが正しく、「名前」に改名されますの代わりに、 "ナム"。 JSON(@Produces(MediaType.APPLICATION_JSON))を出力すると、プロパティの名前が変更されるだけでなく、すべてのプライベートプロパティも出力されます。何が問題ですか?

+0

私が期待するよう 'アプリケーション/ JSON'は、XML固有の注釈を気にしません。私自身。 '@ XmlElement'のバージョンですが、JSON(メタ情報を複製する)のためのカスタムデシリアライザ、またはいくつかのアノテーションを調べる必要があります。あるいは、すべてのメディアに対して動作します。 –

+1

Jerseyの依存バージョンを混用しないでください。 –

+0

@peeskilletこれは確かに私の問題でした。すべての苦労の後、私はジャクソンに行くことを選択ので、私は、 '' org.glassfish.jersey.media ジャージーメディア-JSON-ジャクソン \t \t \t 2.26 \t \tを追加しました。最初はうまくいきませんでした。バージョン番号を2.2に変更しました(私はJersey 2.2を使用しているためです)。最後に! –

答えて

0

@XmlElement(name="name")に変更する必要があります。

+0

これはまさに今言うことですよね? @XmlElement(name = "name") public String getNaam(){ return naam; } –

+0

jsonIgnore注釈を使用してみてください。 – anchreg

+0

認識されません。 '@XmlTransient'も動作しません。 '@XmlTransient'はEclipseによって認識されますが、有効ではありません。 –

0

私はジャクソンを使用して終了しました。私はこれをStackOverflow entryで設定しました。

次のように私のMyApplicationをがなります

package com.weijland.spotitube; 
import javax.ws.rs.ApplicationPath; 
import org.glassfish.jersey.server.ResourceConfig; 

@ApplicationPath("services") 
public class MyApplication extends ResourceConfig { 
    public MyApplication() { 
     packages("org.glassfish.jersey.jackson.JacksonFeature"); 
    } 
} 

をそして、私はこの依存関係を使用して終了:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.2</version> 
</dependency> 
関連する問題