我正在尝试从Spring中的控制器接收一个带有另一个对象的对象,但是我收到了这个错误:
我正在拨打电话:
$("#form").ajaxForm({
type: "POST",
headers: {
Authorization: $cookieStore.get("userPassword"),
FeatureName: name,
},
success: function (data) {
console.log("reload page");
},
dataType: "text"
}).submit();
我收到错误:
Failed to convert property value of type 'java.lang.String' to required type 'com.Option' for property 'option'
这是整个输出行:
org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'modelDTO' on field 'option': rejected value [{"id":3,"optionName":"Other"}]; codes [typeMismatch.modelDTO.option,typeMismatch.option,typeMismatch.com.Option,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [modelDTO.option,option]; arguments []; default message [option]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.Option' for property 'option'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.Option] for property 'option': no matching editors or conversion strategy found]
这是我的控制者和DTO
@RequestMapping(value = "/save", method = RequestMethod.POST)
@Transactional
public @ResponseBody void save(@ModelAttribute("form") ModelDTO model)
...
public class ModelDTO implements Serializable
{
private static final long serialVersionUID = 3276874897891652914L;
private Long userId;
private Option option;
public Long getUserId()
{
return userId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public Option getOption()
{
return option;
}
public void setOption(Option option)
{
this.option = option;
}
}
春天允许这项工作吗?
答案 0 :(得分:0)
由于您是通过请求方法POST
向控制器发送数据,因此您需要使用ModelDTO model
注释@RequestBody
并删除@ResponseBody
,除非您的方法实际上是假设的返回一些东西。另外,请确保您通过表单发送的数据实际上与ModelDTO
匹配。
答案 1 :(得分:0)
我得到了解决方案,我不需要更改任何代码,只需在我正在进行绑定的控制器中添加initBinderAll
。通过此解决方案,我们可以处理未自动转换的数据。
像:
@InitBinder
public void initBinderAll(WebDataBinder binder)
{
binder.registerCustomEditor(Option.class, new OptionPropertyEditor());
}
并创建自定义PropertyEditorSupport
,如:
public class OptionPropertyEditor extends PropertyEditorSupport