我在Spring应用程序中遵循这个方案。ConversionService in Spring
- 请求被发送到服务器与该对象的ID和其他一些PARAMS在此对象
- 与此ID的对象中填充从数据库加载
- getter和setter在调用这个对象来填充值
- ,则对象存储
我问this other question什么之前,向得到目标物填充请求的PARAMS的最佳途径。答案是最好的方法是使用conversion service而不是在@ModelAtribute注释方法中使用它,或者在initBinder中使用编辑器。
所以我试图使用一个转换器,但我还没有找到一个类似的例子,我有点卡住了。我写了如下所示的代码:在init binder中,我注册了转换服务。因此,在填充User对象上的值之前,将调用convert()方法以从数据库加载对象。问题是这个配置不起作用,因为它将对象用户的id(用户名字段)转换为Object用户,但是随后它试图用对象创建一个setUsername(),所以我得到一个“java.lang .IllegalArgumentException:参数类型不匹配“。
任何人都可以给我一个线索或使用ConversionService获取所需行为的方式示例吗?
谢谢。
@Autowired
private ConversionService conversionService;
@InitBinder("user")
public void initBinder(@RequestParam("username")String username, WebDataBinder binder){
binder.setConversionService(conversionService);
}
@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {
...
}
的东西,如:
@Component
public class UserConversionService implements ConversionService{
...
@Override
public Object convert(Object name, TypeDescriptor arg1, TypeDescriptor arg2) {
return userService.find((String)name);
}
}
另请参见:http://stackoverflow.com/a/10240927/59087 – 2015-02-10 20:24:38