SpringMVC接口入参为ObjectStore时提示无可用构造方法如何解决
错误根因
你将com.filenet.api.core.ObjectStore直接作为Spring MVC控制器的请求映射方法入参,Spring MVC会对没有加参数绑定注解的自定义类型参数,默认尝试通过反射调用无参构造方法实例化对象,再绑定请求参数。但ObjectStore是FileNet P8的核心接口,没有构造方法,无法直接实例化,因此触发了该报错。
解决方案
方案1:移除控制器入参,服务内部获取ObjectStore实例(最常用)
ObjectStore是服务端的FileNet对象存储连接实例,不应该由请求参数传入,你可以直接把控制器方法中的ObjectStore os参数移除,在业务逻辑层内部完成实例的初始化和获取。
修改后的控制器代码:
@GetMapping("/dps/{documentName}") @ResponseBody public Document findAccountDetails(@PathVariable String documentName) { return myService.fetchDocById(documentName); }
随后在myService的fetchDocById方法内部,按照FileNet官方的连接流程,通过已配置的域、连接信息获取对应的ObjectStore实例即可。
方案2:自定义参数解析器(需要保留控制器入参时使用)
如果你需要继续在控制器方法中保留ObjectStore os作为入参,可以自行实现Spring MVC的HandlerMethodArgumentResolver,自定义该类型的参数解析逻辑:
- 实现
HandlerMethodArgumentResolver接口,supportsParameter方法判断参数类型是否为ObjectStore resolveArgument方法中编写你的ObjectStore实例获取逻辑- 将自定义的解析器注册到Spring MVC的参数解析器列表中
注意事项
ObjectStore属于服务端内部的资源连接对象,所有初始化逻辑必须放在服务端内部实现,不要接受前端传参构造该实例,避免出现安全漏洞和资源泄漏问题。
内容的提问来源于stack exchange,提问作者Chiranjib Patra
相关产品推荐
相关产品推荐

