2016-08-03 21 views
0

我已经看过在这里,不认为这是任何这些重复:Wildfly无视杰克逊的注解,而不是使用@Provider类

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

对于其他人,我想通了。问题是我在我的pom中没有标记为“提供”范围的jackson罐子。这意味着我的战争档案的WEB-INF/lib目录中有罐子。

尽管它们与Wildfly的jar完全相同(我使用与我正在使用的WF版本相同的版本属性),但它们无法正常工作。看起来像hashCode()是不同的从不同的瓶子相同的注释,即使他们是完全相同的(校验和和所有)。

所以,解决方案是在maven中将所有依赖关系标记为provided