2017-08-23 21 views
5

Tôi có một lớp Java (MyResponse) được trả về bởi nhiều phương thức RestController và có rất nhiều trường.Spring MVC Bỏ qua thuộc tính Json cho một phương thức điều khiển đã cho

@RequestMapping(value = "offering", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> postOffering(...) {} 

@RequestMapping(value = "someOtherMethod", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> someOtherMethod(...) {} 

Tôi muốn bỏ qua (ví dụ: không tuần tự hóa) một trong các thuộc tính chỉ cho một phương pháp.

Tôi không muốn bỏ qua các trường rỗng cho lớp, vì nó có thể có tác dụng phụ trên các trường khác.

@JsonInclude(Include.NON_NULL) 
public class MyResponse { ... } 

Các JsonView có vẻ tốt, nhưng như xa như tôi hiểu rằng tôi phải chú thích tất cả các lĩnh vực khác trong lớp với một @JsonView ngoại trừ một mà tôi muốn bỏ qua mà âm thanh vụng về. Nếu có một cách để làm một cái gì đó như "đảo ngược JsonView" nó sẽ là tuyệt vời.

Bất kỳ ý tưởng nào về cách bỏ qua thuộc tính cho một phương pháp điều khiển?

+1

bạn có thể sử dụng @JsonIgnore nhưng đó sẽ là tất cả các phương pháp. Có thể phân lớp nó và bỏ qua? –

Trả lời

1

Đạo cụ cho this anh chàng.

Theo mặc định (và trong Khởi động mùa xuân) MapperFeature.DEFAULT_VIEW_INCLUSION được bật ở Jackson. Điều đó có nghĩa là tất cả các trường được bao gồm theo mặc định.

Nhưng nếu bạn chú thích bất kỳ trường nào có chế độ xem khác với trường trên phương pháp điều khiển, trường này sẽ bị bỏ qua.

public class View { 
    public interface Default{} 
    public interface Ignore{} 
} 

@JsonView(View.Default.class) //this method will ignore fields that are not annotated with View.Default 
@RequestMapping(value = "offering", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> postOffering(...) {} 

//this method will serialize all fields 
@RequestMapping(value = "someOtherMethod", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> someOtherMethod(...) {} 

public class MyResponse { 
    @JsonView(View.Ignore.class) 
    private String filed1; 
    private String field2; 
} 
Các vấn đề liên quan