我使用Spring版本4.2和Spring启动。我有一个帖子请求 http://localhost:3000/api/standards/ 我有以下json请求正文
{
"standardName": "MyStandard",
"language": "Java",
}
我想要的只是保存标准实体。 StandardEntity的'language'属性是Enum类型。 我的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()始终为null。 我已经尝试了 @InitBinder 并将 @JsonCreator 添加到语言枚举中,但它们都不适用于我。 我的Enum看起来像这样
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();
}
答案 0 :(得分:0)
您的请求应为“java”而非“Java”
{
"standardName": "MyStandard",
"language": "java"
}
当您发送“Java”时,它无法将其映射到任何枚举,所以理想情况下它应该抛出HttpMessageNotReadableException类型的异常,检查堆栈跟踪应该有这样的异常。