java在序列化过程中动态忽略JSON属性仅在某些情况下,对于其他api端点,不应进行过滤
为了简化代码,我将使用这个汽车示例,它有两个字段model和name
@JsonFilter("myFilter")
public class Car {
@Id
@JsonProperty("model")
private Integer model;
@JsonProperty("name")
private String name;
// constructor getters setters
}
在服务班
public FilterProvider getFilterProvider(String[] filtered) {
SimpleBeanPropertyFilter simpleBeanPropertyFilter =
SimpleBeanPropertyFilter.serializeAllExcept(filtered);
return new SimpleFilterProvider().addFilter("myFilter", simpleBeanPropertyFilter);
}
在控制器中,有两种方法。第一个是过滤存储在过滤数组中的字段。但第二个不应该过滤任何东西。但我仍然需要实现filterprovider
private FilterProvider filterProvider;
@JsonProperty
List<Car> cars;
@GetMapping("/filtered")
public ResponseEntity<Object> getCars(@RequestParam Map<String,String> requestParams) {
MappingJacksonValue filteredProps = new MappingJacksonValue(cars);
String[] filtered = {"name"};
filterProvider = this.carService.getFilterProvider(filtered);
filteredProps.setFilters(filterProvider);
return ResponseEntity.ok(filteredProps);
}
@GetMapping("/unfiltered")
public ResponseEntity<Object> getCarsWithName(@RequestParam Map<String,String> requestParams) {
MappingJacksonValue filteredProps = new MappingJacksonValue(cars);
filterProvider = this.carService.getFilterProvider(new String[] {});
filteredProps.setFilters(filterProvider);
return ResponseEntity.ok(filteredProps);
}
我有很多api端点。是否有一种方法可以为所有这些函数实现FilterProvider,但也可以只在所需函数中过滤字段。谢谢
共 (0) 个答案