@jsonview的杰克逊没有与jax-rs合作

Jay*_*thi 7 java jax-rs jackson

我写了以下代码:

class A{
    public static class Public { }
}

// Entity class
public class B{
    @JsonView({A.Public.class}) 
    int a;
    int b;    
}

public class C{
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @JsonView({A.Public.class}) 
    public Bed getData(){
        // return object of B
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待输出为

{a: vlaue}
Run Code Online (Sandbox Code Playgroud)

但我收到了

{a: value, b: value}
Run Code Online (Sandbox Code Playgroud)

请告诉我这段代码有什么问题.

我使用的是杰克逊版本2.4.2

gil*_*esB 7

这种行为的原因是MapperFeature DEFAULT_VIEW_INCLUSION.

来自Javadoc:

默认值已启用,这意味着如果没有JsonView注释,则所有视图中都会包含未注释的属性

在泽西岛,你可以通过JacksonJaxbJsonProvider.对于其他JAX-RS框架,这应该以类似的方式工作.

@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
  public MyApplication() {
    ...

    JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);    
    provider.setMapper(objectMapper);

    register(provider);

    ...
  }
}
Run Code Online (Sandbox Code Playgroud)