11

注釈付きの @JsonView 注釈を持つエンティティ (lombok を使用) があります。

@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;
}

@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);
}

入力には @JsonView で注釈が付けられたフィールドのみが含まれると予想していました。しかし、私はフィールドでいっぱいです。

spring と jackson のソースをデバッグしようとしています。com.fasterxml.jackson.databind.SerializationConfig では、アクティブ ビューが私のクラス JsonViews.OrderAdvancedSearch.class であることがわかりますが、com.fasterxml.jackson.databind.ser.std.BeanSerializerBase では、変数filteredProps には常にエンティティのすべてのプロパティがあります。

4

2 に答える 2

2

Jackson オブジェクト マッパーを微調整してみてください。

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

参照:機能: JSON ビュー

于 2014-10-14T20:59:55.157 に答える