Wildfly 10.1 JSR310 JavaTimeModule

时间:2017-03-22 00:12:59

标签: java json jackson wildfly-10

我有一个基于Wildfly 10.1构建的系统。我想转到Java 8时间API,但我遇到了麻烦。我已确定OffsetDateTime以取代Calendar。目前,Wildfly将这些序列化为

{
  "offset":
  {
    "totalSeconds":-25200,
    "id":"-07:00",
    "rules":
    {
      "fixedOffset":true,
      "transitions":[],
      "transitionRules";[]
    }
  },
  "month":"FEBRUARY",
  "year":2011,
  "hour":0,
  "minute":0,
  "second":0,
  "dayOfMonth":22,
  "dayOfWeek":"TUESDAY",
  "dayOfYear":53,
  "monthValue":2,
  "nano":0
}

显然不正确。基于this StackOverflow question,我添加了以下类:

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

@Provider
public class JSR310ContextResolver
        implements ContextResolver<ObjectMapper>
{
    private final ObjectMapper MAPPER;

    public JSR310ContextResolver()
    {
        super();

        MAPPER = new ObjectMapper();
        MAPPER.registerModule(new JavaTimeModule());
        //MAPPER.registerModule(new Jdk8Module());
        MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

    @Override
    public ObjectMapper getContext(Class<?> arg0)
    {
        return MAPPER;
    }
}

我现在正在ClassNotFoundException上获得JavaTimeModule。 我没有使用Maven,我已经确认jackson-datatype-jsr310.jar存在,它位于\modules\system\layers\base\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\main之下。我的应用程序打包为EAR。

如何配置Wildfly 10.1以使我的应用程序能够访问此JAR文件?

1 个答案:

答案 0 :(得分:0)

我找到了一个答案: 添加

    <global-modules>
        <module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310" slot="main"/>
    </global-modules>

<subsystem xmlns="urn:jboss:domain:ee:4.0">
配置文件的

部分。

是否有人知道一种非全局的方法?