Web リクエスト中にオブジェクトを適切なオブジェクトに変換@InitBinder
できるように、注釈をテストしています。String
Enum
次の単純なものを作成しましたEnum
:
SampleEnum.java
public enum SampleEnum {
ONE,
TWO,
THREE,
FOUR,
FIVE;
}
次に、コードPropertyEditorSupport
から呼び出されるように拡張するエディターを作成しました。@InitBinder
EnumPropertyEditor.java
@SuppressWarnings("rawtypes")
public class EnumPropertyEditor extends PropertyEditorSupport {
private Class clazz;
public EnumPropertyEditor(Class clazz) {
this.clazz = clazz;
}
@Override
public String getAsText() {
return (getValue() == null ? "" : ((Enum) getValue()).name());
}
@SuppressWarnings("unchecked")
@Override
public void setAsText(String text) {
Enum e = Enum.valueOf(clazz, text);
setValue(e);
}
}
次に、コントローラーに@InitBinder
と単純なリクエスト マッピングを追加しました。
コントローラ
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(SampleEnum.class, new EnumPropertyEditor(SampleEnum.class));
}
@RequestMapping(method = POST, value = "/postSampleEnum")
@ResponseBody
public SampleEnum postSampleEnum(@RequestBody SampleEnum sampleEnum) {
return sampleEnum;
}
SampleEnum
私の理解では、このコントローラ メソッドのリクエストでは、文字列値をオブジェクトに変換しようとする必要があります。ただし、initBinder
、リクエスト マッピング メソッド、またはEnumPropertyEditor
.
私は FireFox で RESTClient を使用してテストしており、リクエスト本文「THREE」を送信しようとしましたが、これは機能すると予想されます。代わりに、リクエスト本文の内容に関係なく、415 エラーが発生します。(リクエスト エンティティが、リクエストされたメソッドのリクエストされたリソースでサポートされていない形式であるため、サーバーはこのリクエストを拒否しました ()。)
の代わりに文字列を受け取るようにリクエスト マッピングを変更するSampleEnum
と、postSampleEnum
が呼び出され、カスタム エディターは使用されません (予想どおり)。
カスタム エディター コードを呼び出せるようにするものが不足していますか? これをデバッグし続ける最善の方法は何ですか?