有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案