2010-02-20 98 views
10

在我的POJO中使用@XStreamOmitField似乎没有任何效果。注释字段仍然以xml或json表示形式公开。使用RESTlet,XStream注释似乎没有效果

@XStreamAlias("Pojo") 
@Entity 
public class Pojo { 
    private String name; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long key; 

    @XStreamOmitField 
    private String hidden; 

    public Pojo(String name, String hidden) { 
     this.name = name; 
     this.hidden = hidden; 
    } 
} 

,并在ServerResource

@Get 
public Pojo test() { 
    Pojo pj= new Pojo("hansi","hinter"); 
    return pj; 
} 

让我

<com.myComp.ORMTest.Pojo> 
    <name>hansi</name> 
    <hidden>hinter</hidden> 
</com.myComp.ORMTest.Pojo> 

为什么忽略注释任何想法?

+0

好的,这似乎不是获得GAE,RESTlet和XStream一起工作的唯一问题。我正在寻找另一种解决方案。 – chaos0815 2010-02-22 12:04:35

回答

14

你必须告诉XStream的明确处理注释:

XStream xstream = new XStream(); 
xstream.processAnnotations(MyClass.class); 

或者,你应该添加此代码告诉XStream的处理所有注释:

xstream.autodetectAnnotations(true); 
+1

只需注意其他搜索者:注释的自动检测仅适用于序列化,* not *反序列化。您必须处理每个类(或它们的数组)以解析XML。 – 2013-10-23 00:51:52

2

两件事情浮现在脑海中:

1)你告诉XStream的解析注解?

2.)你的web框架可能使用代理来访问pojos,那些不会委派注释? (碰巧与Apache Tapestry的朋友)

+0

伟大的线索。将开始朝这个方向挖掘。 谢谢 – chaos0815 2010-02-24 12:00:15