@JsonView不过滤属性(Spring 4.1.0.RC2,Jackson 2.3.2)

Pav*_*nko 11 java spring json jackson json-view

我有一个实体(使用lombok)和一些带注释的@JsonView注释.

@Entity
@Table(name = "`order`")
@Getter
@Setter
@ToString
@Description("??????")
public class Order extends Auditable {


    private static final long serialVersionUID = -1299630493411381582L;

    @JsonView(JsonViews.OrderAdvancedSearch.class)
    @ManyToOne
    private School school;

    @Column(length = 50)
    private String number;
}
Run Code Online (Sandbox Code Playgroud)

有一个用@JsonView注释注释的控制器方法.

@Secured(value = {"ROLE_AUTHENTICATED_USER"})
@RequestMapping(value = "/order", method = RequestMethod.GET, headers = {"Content-Type=application/json"})
@JsonView(JsonViews.OrderAdvancedSearch.class)
@ResponseBody
public ResponseEntity<Order> getOrder(HttpServletRequest request) throws IOException, DnevnikException, RestException {
    Order order = orderRepository.findOne(292L); // just for example
    return new ResponseEntity<>(order,HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)

我希望输入只包含用@JsonView注释的字段.但我充满了田野.

我正在尝试调试spring和jackson来源.在com.fasterxml.jackson.databind.SerializationConfig中,我看到活动视图是我的类JsonViews.OrderAdvancedSearch.class但是在com.fasterxml.jackson.databind.ser.std.BeanSerializerBase变量中,filteredProps始终具有我的实体的所有属性.

小智 2

尝试调整你的 Jackson 对象映射器:

// disable this feature so that attributes with no view definition
// do not get serialized / deserialized
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
Run Code Online (Sandbox Code Playgroud)

参考:功能:JSON 视图