Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson反序列化枚举值_Java_Spring_Enums_Jackson - Fatal编程技术网

Java Jackson反序列化枚举值

Java Jackson反序列化枚举值,java,spring,enums,jackson,Java,Spring,Enums,Jackson,当我传递null值时,是否可以为enum设置默认值 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 g

当我传递null值时,是否可以为enum设置默认值

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中有一个enum作为字段,当我传递null值时-jackon将其反序列化为null,但当我传递一些奇怪的东西时-它设置默认值。我的jackson配置在这里:

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

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

例如:


是的,当我移除lombok@AllArgsConstructor时,它对我起了作用。Jackson用空值调用它,而我的字段init失败了。
class Dto {
    private Something something = Something.A;
    private Smth smth;
    private String name;
}