我目前正在开展一个项目,该项目允许用户在给定的时间段内(通过网络)预订所选资源的使用.在这个程序中,我试图遵循Spring对接口编程的哲学(以及通用的最佳实践),因此我尝试在具体类之间重复功能的任何地方使用接口.
我创建的一个接口称为BookableResourceController,它指定控制器处理所需的任何类型资源所需的最低功能所需的方法.我还使用了第二个接口BookableResource,它可以识别哪些对象模拟了允许通过应用程序预订的资源.
我目前遇到的问题是,BookableResourceController定义的一些方法使用@RequestBody映射将JSON对象转换为方法参数,并且由于Jackson只能将JSON转换为"SimpleType"对象,因此我收到错误我将输入参数指定为BookableResource.
@RequestMapping(value="/delete.html", method = RequestMethod.POST)
public ModelAndView processDeleteResource(
@RequestBody BookableResource resource);
Run Code Online (Sandbox Code Playgroud)
无法构造org.codehaus.jackson.map.type.SimpleType的实例,问题:抽象类型只能使用其他类型信息进行实例化
据我所知,这个错误意味着我需要定义BookableResource的特定实现,这意味着我很可能需要从接口中排除这些方法,即使任何用于此目的的控制器都需要这些方法.
我要问的是,是否有人知道如何将接口定义为@RequestBody使用JSON 的映射所期望的对象,或者是否有人建议如何构造我的控制器接口以包含这些方法?
干杯
我想知道Spring中是否有某种方法可以在控制器中指定我想将客户端发送到我用于查看的.jsp页面中的特定锚点.
我的.jsp页面中有一个由#errors锚标识的部分,它显示出现的任何表单错误.我想能够在模型验证失败后将它们发送回.jsp时直接将它们发送到该锚点.
在我的控制器类中,我处理验证错误,如下所示:
if (result.hasErrors())
{
for (ObjectError error : result.getAllErrors())
{
logger.debug("Validation Error: " + error.getDefaultMessage());
}
ModelAndView mv = new ModelAndView();
mv.setViewName("/secure/formViews/newAdminBookingMenu");
mv.addObject(BindingResult.MODEL_KEY_PREFIX + "booking", result);
return mv;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在该代码块中指定当客户端获得渲染newAdminBookingMenu.jsp后,它们将被直接发送到该#errors页面中的锚标记.
我显然不能通过添加#errors我希望渲染的.jsp的名称来做到这一点,因为InternalResourceViewResolver将解释视图/WEB-INF/jsp/jspName#errors.jsp显然不正确.
我知道这可以通过javascript和onload事件来完成,但我发现那种脏,并且如果存在的话,真的宁愿找到Spring方法.
有任何想法吗?
干杯.