2017-10-09 168 views
0

我可以爲枚舉設置默認值,當我傳遞空值?傑克遜反序列化枚舉值

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,當我通過空值 - 同時傑克遜反序列化的空,但是當我通過一些奇怪的 - 它設置默認值。我的傑克遜的配置是在這裏:

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

回答

0

你需要在類級別提供默認值,那麼它將爲空值工作。

例如爲:

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

是的,它的工作對我來說,當我刪除了龍目島@AllArgsConstructor。 傑克遜用空值調用它,並且我的字段init失敗。 – Radik