【问题标题】:Spring Rest Post Request Enumeration propertySpring Rest Post 请求枚举属性
【发布时间】:2018-02-15 00:54:27
【问题描述】:

我正在使用带有 Spring Boot 的 Spring 4.2 版。我有一个帖子请求 http://localhost:3000/api/standards/ 我有以下 json 请求正文

{
"standardName": "MyStandard",
"language": "Java",
}

我只想保存一个标准实体。 StandardEntity 的“语言”属性是枚举类型。 我的 Controller 方法如下所示

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Standard> createStandard(@Validated @RequestBody Standard standard ) {
        standardService.createStandard(standard);
        return new ResponseEntity<Standard>(standard, HttpStatus.CREATED);

    }

但在控制器内部,standard.getLangauge() 始终为空。 我已经尝试了 @InitBinder 并将 @JsonCreator 添加到 Language 枚举,但它们都不适合我。 我的枚举看起来像这样

public enum Language {
@JsonProperty("java")Java("java"), 
@JsonProperty("sql")Sql("sql");

private String value;

private Language(String value) {
    this.value = value;
}

public static Language fromValue(String value) {
    for (Language language : values()) {
        if (language.value.equalsIgnoreCase(value)) {
            return language;
        }
    }
    throw new IllegalArgumentException(
            "Unknown enum type " + value + ", Allowed values are " + Arrays.toString(values()));
}

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

@JsonCreator
public static Language create(String value) {
    System.out.println("in json creator "+value);
    if (value == null) {
        throw new IllegalArgumentException();
    }
    for (Language v : values()) {
        if (value.equals(v.getShortName())) {
            return v;
        }
    }
    throw new IllegalArgumentException();
}

【问题讨论】:

  • 显示你的枚举?
  • 用枚举更新了问题

标签: json spring enums jackson spring-rest


【解决方案1】:

您的请求应该是“java”而不是“Java”

{
    "standardName": "MyStandard",
    "language": "java"
}

当您发送“Java”时,它无法将其映射到任何 Enum,因此理想情况下它应该抛出 HttpMessageNotReadableException 类型的异常,检查堆栈跟踪应该有这样的异常。

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2017-12-29
    • 2018-09-03
    • 2011-02-16
    相关资源
    最近更新 更多