【发布时间】: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