【发布时间】:2012-05-04 12:28:30
【问题描述】:
我有一个 JAX-RS 资源,我想使用 java.util.Calendar 属性为 @JsonSerialize(using=MySerializer.class) 使用自定义 JSON 序列化程序。
import java.util.Calendar;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class FooBar {
@JsonSerialize(using=MySerializer.class)
private Calendar calendar;
public FooBar() {
calendar = Calendar.getInstance();
}
public Calendar getCalendar() {
return calendar;
}
}
MySerializer.java:
import java.io.IOException;
import java.util.Calendar;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
public class MySerializer
extends JsonSerializer<Calendar>
{
@Override
public void serialize(Calendar c, JsonGenerator jg, SerializerProvider sp)
throws IOException, JsonProcessingException
{
jg.writeString("fooBar Calendar time: " + c.getTime());
}
}
我在 NetBeans 7.1 中做了一个简单的项目,效果很好。
当我在其他具有不同部署的项目中使用它(EAR 带有多个 WAR 和 EJB JAR)时,我会收到
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class
com.example.FooBar and MIME media type application/json was not found
但如果我将初始化参数放入 web.xml 中
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
json 序列化工作,
但@JsonSerialize 注释不起作用。
另一方面,Netbeans 项目不需要POJOMappingFeature。
这两个应用程序之间可能有什么区别?
一个应用程序需要POJOMappingFeature 而另一个应用程序不需要有什么区别?
【问题讨论】:
标签: java glassfish jersey jax-rs jackson