[英]initBinder method is not being called for conversion from String to Enum
我正在測試@InitBinder
批注,以便可以在Web請求期間將String
對象轉換為適當的Enum
對象。
我創建了以下簡單的Enum
:
SampleEnum.java
public enum SampleEnum {
ONE,
TWO,
THREE,
FOUR,
FIVE;
}
然后,我創建了一個擴展PropertyEditorSupport
的編輯器,可以從@InitBinder
代碼中調用@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
調用SampleEnum
,並且不使用自定義編輯器(按預期方式)。
我是否缺少任何可以調用自定義編輯器代碼的內容? 繼續調試的最佳方法是什么?
首先,我忘了將application / json內容類型添加到RESTClient中的請求標頭中。 > _ <
但是,我注意到代碼執行仍然沒有通過自定義屬性編輯器進行。 就像GriffeyDog所說的,似乎代碼僅在我切換到RequestParam
或ModelAttribute
時才執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.