gpt4 book ai didi

java - 如何创建一个能够支持@JsonFilter注解的POJO的全局过滤器

转载 作者:行者123 更新时间:2023-12-02 10:56:15 25 4
gpt4 key购买 nike

我在使用SimpleFilterProvider创建简单过滤器时遇到问题

Can not resolve PropertyFilter with id 'customerFilter'; no FilterProvider configured

我的代码是:

SimpleFilterProvider simpleFilterProvider = new SimpleFilterProvider().setFailOnUnknownId(false);
FilterProvider filters =simpleFilterProvider.addFilter("customerFilter", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames));
ObjectWriter writer=null;
ObjectMapper mapper = new ObjectMapper();
mapper.setFilterProvider(filters);
writer=mapper.writer();
String dtoAsString = writer.writeValueAsString(customer);

我的 POJO 是客户

import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonFilter("customerFilter")
public class Customer {

public Customer() {

}

public Customer(String customerId,String phoneNumber) {

this.customerId=customerId;
this.phoneNumber=phoneNumber;
}

/**
* customer identifier
*/
@JsonPropertyDescription("customer identifier")
@JsonProperty("customerId")
private String customerId;

/**
* customer phone number
*/
@JsonPropertyDescription("customer phone number")
@JsonProperty("phoneNumber")
private String phoneNumber;
....

考虑到我的应用程序是 SpringBoot 应用程序,请提供任何帮助!

最佳答案

如果您手动序列化您的 Customer 对象(例如在 RestController 中)(完全按照您的编码),它可以正常工作(请参阅下面的方法 getManual )。然而,依赖 Spring 对象映射器需要注册额外的过滤器提供程序(没有它,方法 getAuto 会失败):

@RestController
@RequestMapping("/customer")
public class CustomerController {

private static final Set<String> ignorableFieldNames= new HashSet<>();

static {
ignorableFieldNames.add("customerId");
}

@RequestMapping("auto")
public Customer getAuto() throws JsonProcessingException {
return new Customer("123", "456");
}

@RequestMapping("manual")
public String getManual() throws JsonProcessingException {
SimpleFilterProvider simpleFilterProvider = new SimpleFilterProvider().setFailOnUnknownId(false);
FilterProvider filters = simpleFilterProvider.addFilter("customerFilter", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames));

ObjectWriter writer = null;
ObjectMapper mapper = new ObjectMapper();
mapper.setFilterProvider(filters);
writer = mapper.writer();

Customer customer = new Customer("123", "456");
String dtoAsString = writer.writeValueAsString(customer);
return dtoAsString;
}
}

注册您的自定义过滤器:

@Component
public class CustomerFilterConfig {
private static final Set<String> ignorableFieldNames = new HashSet<>();

static {
ignorableFieldNames.add("phoneNumber");
}

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();

SimpleFilterProvider simpleFilterProvider = new SimpleFilterProvider().setFailOnUnknownId(false);
FilterProvider filters = simpleFilterProvider.addFilter("customerFilter", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames));
objectMapper.setFilterProvider(filters);

jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
}

关于java - 如何创建一个能够支持@JsonFilter注解的POJO的全局过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com