[英]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.