我正在测试@InitBinder
注释,以便在 Web 请求期间将String
对象转换为适当的对象。Enum
我创建了以下简单的Enum
:
示例枚举.java
public enum SampleEnum {
ONE,
TWO,
THREE,
FOUR,
FIVE;
}
然后,我创建了一个编辑器PropertyEditorSupport
,可以从@InitBinder
代码中调用:
枚举属性编辑器.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 进行测试,并尝试发送请求正文“三”,我希望它可以工作。相反,无论请求正文中的内容如何,我都会收到 415 错误。(服务器拒绝了这个请求,因为请求实体的格式不受请求的方法 () 的请求资源支持。)
如果我将请求映射更改为接受字符串而不是 a SampleEnum
,postSampleEnum
则会调用并且不使用自定义编辑器(如预期的那样)。
我是否遗漏了任何允许调用自定义编辑器代码的内容?继续调试的最佳方法是什么?