【问题标题】:Jackson Deserialization Enum ValuesJackson 反序列化枚举值
【发布时间】:2017-10-09 17:27:22
【问题描述】:

当我传递空值时,我可以为枚举设置默认值吗?

public enum Something {
@JsonEnumDefaultValue
A(new BigDecimal(123)),
B(new BigDecimal(555)),
C(new BigDecimal(21312));

private BigDecimal value;

Something(BigDecimal value) {
    this.value = value;
}

public BigDecimal getValue() {
    return value;
}

}

我将此枚举作为 DTO 中的字段,当我传递空值时 - jackon 将其反序列化为空值,但当我传递一些奇怪的东西时 - 它设置默认值。我的杰克逊配置在这里:

@Bean
public ObjectMapper mapper() {
    val mapper = new ObjectMapper();
    return mapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE);
}

Dto类:

public class Dto {
private Something something;
private Smth smth;
private String name;
}

控制器:

@PostMapping
public ResponseEntity<Long> saveEntity(@RequestBody Dto dto) {
    return ResponseEntity.ok(repository.save(
            MyEntity.builder()
                    .name(dto.getName())
                    .something(dto.getSomething())
                    .smth(dto.getSmth())
                    .build())
            .getId());
}

【问题讨论】:

    标签: java spring enums jackson


    【解决方案1】:

    您需要在类级别提供默认值,然后它将适用于空值。

    例如:

    class Dto {
        private Something something = Something.A;
        private Smth smth;
        private String name;
    }
    

    【讨论】:

    • 是的,当我删除 lombok @AllArgsConstructor 时,它对我有用。杰克逊用空值调用它,我的字段初始化失败了。
    猜你喜欢
    • 2021-12-27
    • 2015-10-19
    • 2020-07-17
    • 2016-10-16
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2012-11-04
    • 2014-07-16
    相关资源
    最近更新 更多