2014-04-01 27 views
3

我正在使用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服务器。有没有人如何解决这个问题?

回答

-1

您可以直接在你的pom.xml文件中使用

<properties> 
    <project.build.sourceEncoding>ISO-8601</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>ISO-8601</project.reporting.outputEncoding> 
</properties> 

这应该编码在ISO-8601整个项目,包括您的日期变量配置编码。

另一种可能性是将变量与utils的类和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()); 
    } 
} 

此方法将返回您的日期变量格式的字符串。

+0

我不认为你明白我的观点。我在谈论json序列化,不仅格式化一些简单的字符串值。看到这篇文章,我有类似的问题。 http://stackoverflow.com/questions/13803391/serialize-date-in-a-json-rest-web-service-as-iso-8601-string?rq=1 – Chris

+0

哦,我明白了,我误解了你的问题。 @JsonFormat注释是否适合你? – muffin

相关问题