如何修复@requestbody和Enum值中的JSON解析错误?

我有两种方法:

  1. “ JSON正文”请求
  2. “表单参数”请求
@RequestMapping(value = "/orders.json", consumes = { "application/json" }, method = RequestMethod.POST)
@Override
public ResponseEntity<Void> createOrder(@Valid @RequestBody OrderCreateDTO orderCreateDTO) {
    return doCreateOrder(orderCreateDTO);
}

@RequestMapping(value = "/orders.json", consumes = { "application/x-www-form-urlencoded" }, method = RequestMethod.POST)
public ResponseEntity<Void> createOrderForm(@Valid @ModelAttribute OrderCreateDTO orderCreateDTO) {
    return doCreateOrder(orderCreateDTO);
}

第二种方法很好,但是第一种方法有问题。 在该方法中,当我发送枚举字段时,出现以下错误:

JSON parse error: Cannot construct instance of `......service.dto.EuropeanLanguageEnumTypeDTO`, problem: Unexpected value 'EN'; nested exception is com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `......service.dto.EuropeanLanguageEnumTypeDTO`, problem: Unexpected value 'EN'\n at [Source: (PushbackInputStream); line: 6, column: 17] (through reference chain: ......service.dto.OrderCreateDTO[\"language\"])

EuropeanLanguageEnumTypeDTO.java:

public enum EuropeanLanguageEnumTypeDTO {
  
  BG("bg"),
  
  HR("hr"),
  
  CS("cs"),
  
  DA("da");

  private String value;

  EuropeanLanguageEnumTypeDTO(String value) {
    this.value = value;
  }

  @JsonValue
  public String getValue() {
    return value;
  }

  @Override
  public String toString() {
    return String.valueOf(value);
  }

  @JsonCreator
  public static EuropeanLanguageEnumTypeDTO fromValue(String value) {
    for (EuropeanLanguageEnumTypeDTO b : EuropeanLanguageEnumTypeDTO.values()) {
      if (b.value.equals(value)) {
        return b;
      }
    }
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
  }
}

另外,我还有另一个组件来转换枚举,但它仅适用于“ form”请求:

@Component
public class EuropeanLanguageEnumConverter implements Converter<String, EuropeanLanguageEnumTypeDTO> {

    @Override
    public EuropeanLanguageEnumTypeDTO convert(String value) {
        return EuropeanLanguageEnumTypeDTO.fromValue(value);
    }

}

工作JSON而不工作的示例:

成功:

{
    "language": "en"
}

失败:

{
    "language": "EN"
}

I need to work with upper and lower case.
I search a lot and tried some different ways, such as jackson.mapper.ACCEPT_CASE_INSENSITIVE_ENUMS: true, but didn't work, please help me with this issue.

P.s.由于某种原因,我无法在ENUM类中进行编辑,因为它将使用openAPI生成。