JsonDeserializer 不适用于类,而只能适用于类的单个元素

Jac*_*ket 5 java json jackson json-deserialization

我创建了一个新的反序列化器,以便能够将空字符串写为 null

public class CustomDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException  {
        JsonNode node = jsonParser.readValueAsTree();
        if (node.asText().isEmpty()) {
            return null;
        }
        return node.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试在每个用户字段上进行单个注释,自定义工作但通过在整个类上插入注释,我无法再打印 Json 消息

@JsonDeserialize(using = CustomDeserializer.class)
public class User {
    private String firstName;
    private String lastName;
    private String age;
    private String address; }
Run Code Online (Sandbox Code Playgroud)

CustomExceptionHandler 向我抛出此错误:Class MethodArgumentNotValidException 这是我的 Kafka Consumer,这是我输入验证注释的唯一一个,但即使删除它也会给我同样的错误

public class KafkaConsumer {

    @Autowired
    private UserRepository userRepository;

    @KafkaListener(topics = "${spring.kafka.topic.name}")
    public void listen(@Validated User user) {

        User  user = new User(user);
        UserRepository.save(user.getName(), user);
    }
}
Run Code Online (Sandbox Code Playgroud)

对象映射器

public ObjectMapper getObjectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JavaTimeModule());
    mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.setSerializationInclusion(Include.NON_NULL);
    return mapper;
}
Run Code Online (Sandbox Code Playgroud)

是否有可能让它在全班工作?