0
스프링 부트와 함께 스프링 버전 4.2를 사용하고 있습니다. 나는 다음과 같은 JSON 요청 본문스프링 레스트 포스트 요청 열거 속성
{
"standardName": "MyStandard",
"language": "Java",
}
내가 원하는 모든 표준 개체를 저장하는 것입니다을 가지고있는 POST 요청 http://localhost:3000/api/standards/ 있습니다. StandardEntity의 'language'속성은 Enum 유형입니다. 내 컨트롤러 방법이
@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();
}
당신의 enum을 보냅니까? – Taylor
질문을 enum으로 업데이트했습니다. –