春季转换服务
我在Spring应用程序中遵循此方案。
- 请求将发送到服务器,其中包含对象的 ID 以及要在此对象中填充的一些其他参数
- 具有此 ID 的对象从数据库加载
- 在此对象中调用 getter 和 setter 来填充值
- 然后存储对象
在另一个问题中,我问了在填充请求的参数之前准备对象的最佳方法是什么。答案是,最好的方法是使用转换服务,而不是在@ModelAtribute注释的方法中使用或在initBinder中使用编辑器。
所以我尝试使用转换器,但我没有找到类似的示例,我有点卡住了。我写了一个如下代码:在初始化绑定器中,我注册转换服务。因此,在填充 User 对象 convert() 方法上的值之前,将调用该方法从数据库中加载对象。问题是这个配置不起作用,因为它正在将对象用户的id(用户名字段)转换为对象用户,但随后它试图用对象创建一个setUsername(),所以我得到一个“java.lang.IllegalArgumentException:参数类型不匹配”。
任何人都可以给我一个线索或一个例子,说明如何使用转换服务来获得所需的行为?
谢谢。
@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);
}
}