2012-11-07 18 views
5

私はPojoオブジェクトを持ち、このオブジェクトのJson文字列を返すgetAsJson関数を持っています。 私はJsonPropertyを使用してこのオブジェクトのjsonプロパティを定義します。 ObjectMapperのwriteValueAsStringを使用して、このオブジェクトのJSON文字列を書き込みます。今jacksonを使用してJavaオブジェクトをjson文字列に変換するときにjsonプロパティが重複する

import org.codehaus.jackson.JsonGenerationException; 
import org.codehaus.jackson.annotate.JsonIgnore; 
import org.codehaus.jackson.annotate.JsonIgnoreProperties; 
import org.codehaus.jackson.annotate.JsonProperty; 
import org.codehaus.jackson.map.JsonMappingException; 
import org.codehaus.jackson.map.ObjectMapper; 

@JsonIgnoreProperties(ignoreUnknown=true) 
public class LogLikeArticleDetail extends BaseObject { 
    private static final long serialVersionUID = -2018373118257019033L; 
    @JsonProperty("LikeArticleGUId") 
    private String likeArticleGUId; 
    @JsonProperty("UserId") 
    private String userID; 
    @JsonProperty("UserName") 
    private String userName; 
    @JsonProperty("IP") 
    private String ip; 
    @JsonProperty("OS") 
    private String os; 
    @JsonProperty("UserAgent") 
    private String userAgent; 
    @JsonProperty("WebsiteCode") 
    private String websiteCode; 
    @JsonProperty("ArticleId") 
    private String articleID; 
    @JsonProperty("ATitle") 
    private String aTitle; 
    @JsonProperty("CateAlias") 
    private String cateAlias; 
    @JsonProperty("LikeStatus") 
    private String likeStatus; 
    @JsonProperty("TimeStamp") 
    private Date timeStamp; 
     //get, set.... 
     //.... 
     @JsonIgnore 
    public String getAsJSON() throws JsonGenerationException, JsonMappingException, IOException{ 
     ObjectMapper mapper = new ObjectMapper(); 
     return mapper.writeValueAsString(this) ; 
    } 
} 

、私は

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 
     Calendar calendar = Calendar.getInstance(); 
     LogLikeArticleDetail logLikeArticle = new LogLikeArticleDetail("1","2","3","4","5","6","7","8","what thing \"nothing\" show","10","11",calendar.getTime()); 
     System.out.println(logLikeArticle.getAsJSON()); 
    } 

しかし、結果の重複プロパティを取得結果:

{"LikeArticleGUId":"1","UserId":"2","UserName":"3","IP":"4","OS":"5","UserAgent":"6","WebsiteCode":"7","ArticleId":"8","ATitle":"what thing \"nothing\" show","CateAlias":"10","LikeStatus":"11","TimeStamp":1352256727062,"_likeArticleGUId":"1","websiteCode":"7","likeStatus":"11","userID":"2","userName":"3","ip":"4","os":"5","userAgent":"6","articleID":"8","aTitle":"what thing \"nothing\" show","cateAlias":"10","timeStamp":1352256727062} 

だが、この問題で発生するものを見せて?

+0

これは答えかもしれないと思います:http://stackoverflow.com/questions/7105745/how-to-specify-jackson-to-only-use-fields-preferably-globally – pawelzieba

+0

ああ、はい、@pawelziebaに感謝します。これは答えです。 – Sonrobby

答えて

11

ので、私は従ってください: how to specify jackson to only use fields - preferably globally

を私は

public class LogLikeArticleDetail extends BaseObject 

と私が望む結果の前に

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) 

を追加します。

ObjectMapper mapper = new ObjectMapper(); 
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker() 
       .withFieldVisibility(JsonAutoDetect.Visibility.ANY) 
       .withGetterVisibility(JsonAutoDetect.Visibility.NONE) 
       .withSetterVisibility(JsonAutoDetect.Visibility.NONE) 
       .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)); 
return mapper.writeValueAsString(this) ; 

@Sean大工さんの質問には、上のリンクでkmb385答え@感謝を:

だから、別のは次のようにそのgetAsJson()関数を解決することができます。

1

アノテーションを使用してPOJOごとにこれを行うこともできます。

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY、 getterVisibility = JsonAutoDetect.Visibility.NONE、 setterVisibility = JsonAutoDetect.Visibility:あなたはには、自動検出が好きなんだろう、あなたのクラスの先頭にこの文字列を追加します。 .NONE、 creatorVisibility = JsonAutoDetect.Visibility.NONE)例えば

@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE, 
     setterVisibility=JsonAutoDetect.Visibility.NONE, creatorVisibility=JsonAutoDetect.Visibility.NONE) 
class Play { 
    @JsonProperty("Name") 
    private String name; 

    @JsonProperty("NickName") 
    private String nickName; 

    public Play(){ 

    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getNickName() { 
     return nickName; 
    } 

    public void setNickName(String nickName) { 
     this.nickName = nickName; 
    } 
} 

これは私が「プロパティを返します。フィールド名を自動検出し、返されたJSON結果に追加しません。

関連する問題