2017-09-06 11 views
0

私は春のバージョン4.2と春のブートを使用しています。私が欲しいのは、標準的な実体を保存することです、私は次のようなJSONリクエストボディ春休み投稿リクエスト列挙プロパティ

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

を持って 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を言語列挙型に追加しましたが、いずれも私のために働いていません。 私の列挙型は、この

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

質問を列挙型で更新しました –

答えて

0

のように見えますが、任意の列挙型にマップすることはできませんで、それを「ジャワ」を送信しているときにあなたの要求は、

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

代わりの「Java」の「Javaの」あるべき理想的には、HttpMessageNotReadableException型の例外がスローされるはずです。そのような例外があるはずのスタックトレースを確認してください。

関連する問題