简体   繁体   English

杰克逊反序列化枚举值

[英]Jackson Deserialization Enum Values

Can i set default value for enum, when i am passing null value? 当我传递空值时,可以设置枚举的默认值吗?

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;
}

} }

I have this enum as field in my DTO, when i pass null value - jackon deserializes it as null, but when i pass something weird - it sets default value. 当我传递空值时,我在DTO中将此字段作为字段-jackon将其反序列化为空,但是当我传递怪异的东西时-它设置了默认值。 My jackson config is here: 我的杰克逊配置在这里:

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

Dto class: Dto类:

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

Controller: 控制器:

@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());
}

You need to provide default value at class level, then it will work for null values. 您需要在类级别提供默认值,然后它将适用于空值。

Eg: 例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM