Wildfly无视jackson注释而不使用@Provider类

时间:2016-08-03 22:43:44

标签: java json annotations

我在这里环顾四周,并不认为这是任何一个副本:

using Jackson annotations in Wildfly

jackson annotations being ignored

Wildfly and Jackson @JsonIgnore annotation

使用Wildfly 10并使用以下类部署战争:

@Provider
public class JaxApplication implements ContextResolver<ObjectMapper> {
  private final ObjectMapper mapper;

  public JaxApplication() {
    mapper = new ObjectMapper();
    mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    //throw new RuntimeException("HERE");
  }

  @Override
  public ObjectMapper getContext(Class<?> type) {
    throw new RuntimeException("HERE");
    //return mapper;
  }

}

我看到部署时抛出的构造函数中的异常如果没有注释,但是当我向REST服务发出请求时,我看不到getContext方法中的异常

我在实体上有一个@JsonIgnore注释但它不起作用,@JsonIdentityInfo注释我也没有使用

该类看起来像这样(包含导入,以验证我使用com.fasterxml。*)

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * Created by mb995a on 7/29/2016.
 */
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@request_id", scope=Request.class)

public class Request extends BaseEntity {

我是否需要在REST配置中做一些特别的事情?

@ApplicationPath("api")
public class RestApplication extends Application {
    public RestApplication() {
        super();
    }
}

有什么想法吗?

编辑说:我还有一个使用ObjectMapper的单元测试,并且它正确序列化。

1 个答案:

答案 0 :(得分:2)

对于其他任何人,我都想到了这一点。问题是我的pom里有杰克逊罐子没有被标记为“提供”范围。这意味着我在war文件的WEB-INF/lib目录中有jar。

即使它们与Wildfly的jar版本完全相同(我使用与我正在使用的WF版本相同的版本属性),但它们无法正常工作。看起来hashCode()对于来自不同jar的相同注释是不同的,即使它们完全相同(校验和和所有内容)。

因此,解决方案是在所有杰克逊的东西中将依赖关系标记为maven中的provided