我正在使用WildFly 8.0.0 Final。其余的WebService实现是RestEasy。根据WildFly / Jboss文档,我添加了jboss-deployment-structure.xml以使用Jackson2.2。*提供程序。
<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-deployment-structure.xml没有将jackson2类导入我的WildFly服务器。有没有人如何解决这个问题?
答案 0 :(得分:-1)
您可以使用
直接在pom.xml文件中配置编码<properties>
<project.build.sourceEncoding>ISO-8601</project.build.sourceEncoding>
<project.reporting.outputEncoding>ISO-8601</project.reporting.outputEncoding>
</properties>
这应该用ISO-8601编码整个项目,包括你的日期变量。
另一种可能性是使用Utils Class和SimpleDateFormat转换程序中的变量:
public abstract class DateUtils {
private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/** Returns the current time as a String. */
public static String getCurrentDate() {
return SIMPLE_DATE_FORMAT.format(new Date());
}
}
此方法会将Date变量作为格式化字符串返回。