我正在使用WildFly 8.0.0 Final。其余的WebService实现是RestEasy。根据WildFly/Jboss文档,我添加了jboss-deployment-structure.xml来使用Jackson2.2。*提供程序。如何在WildFly中将JSON java.util.Date变量序列化为ISO-8601格式的日期字符串?
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.jboss.resteasy.resteasy-jackson-provider"/>
</exclusions>
<dependencies>
<module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
现在,我的问题是,所有的java.util.Date变量都没有序列化为ISO-8601格式。我看过这个帖子Wildfly using the Jackson provider instead of Jettison,但它使用的是jackson-provider-1。
是否有任何可以使所有日期变量格式化为ISO-8601的配置?
我不想添加任何外部依赖关系。只有使用WildFly才是最好的选择。我将下面的依赖添加到我的pom.xml文件中。我的代码是在https://github.com/evil850209/javaee7-samples
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
我也做了一些提到这个帖子(Wildfly using the Jackson provider instead of Jettison)。现在我得到新的错误:
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at org.chris.demo.rest.JacksonConfig.<init>(JacksonConfig.java:18)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_25]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_25]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_25]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_25]
at org.jboss.resteasy.core.ConstructorInjectorImpl.construct(ConstructorInjectorImpl.java:148)
我已经改变了我的jboss-deployment-structure.xml,我把它放在WEB-INF文件夹下。
<?xml version="1.0" ?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
</exclusions>
<dependencies>
<module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
</dependencies>
</deployment>
</jboss-deployment-structure>
我JacksonConfig类是这样的:
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonConfig implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public JacksonConfig() {
objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return objectMapper;
}
}
这似乎是JBoss的部署,structure.xml的jackson2类不导入到我的WildFly服务器。有没有人如何解决这个问题?
我不认为你明白我的观点。我在谈论json序列化,不仅格式化一些简单的字符串值。看到这篇文章,我有类似的问题。 http://stackoverflow.com/questions/13803391/serialize-date-in-a-json-rest-web-service-as-iso-8601-string?rq=1 – Chris
哦,我明白了,我误解了你的问题。 @JsonFormat注释是否适合你? – muffin