2017-09-06 3 views
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(); 
} 
+0

당신의 enum을 보냅니까? – Taylor

+0

질문을 enum으로 업데이트했습니다. –

답변

0

요청처럼 보이는 것은 "자바"대신 "자바"

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

해야한다, 그래서 이상적으로 그것은 HttpMessageNotReadableException 타입의 예외를 던져야한다.