我正在寻求有关 Spring Controller 定义的帮助。我尝试用谷歌搜索几次,但没有找到直接解释如何实现我的目标。
我想定义通用 Controller :
public abstract class AbstractController<E extends AbstractEntity,
P extends IRequestParams> {
@RequestMapping(method = GET)
public @ResponseBody
abstract List<E> list(@RequestParam P params);
}
之后我会声明 Controller ,例如:
public class CatController
extends AbstractController<Cat, ICatSearchParams> {
@RequestMapping(method = GET)
public @ResponseBody
List<Cat> list(@RequestParam ICatSearchParams params) {
// do something and return list of results
}
}
我有可以改变的服务@RequestParam Map<String, String[]> params
进入IRequestParams
以一般的方式。我能够通过 Spring 解析泛型类型。
但我不知道如何插入 Spring 以自动将请求参数转换为我的参数接口(interface)并在方法调用中使用它。我希望这种转换在配置后对开发人员来说是透明的。
预先感谢您的帮助!
最佳答案
您可以实现 HandlerMethodArgumentResolver但随后您将需要自己实现完整的对象映射。
注册很简单:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="YourMethodArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
<小时/>
另一种方法是实现自定义 Converter 。主要问题是,转换器只能转换一个字符串/请求属性。但是,如果您的 IRequestParams
在 http 请求中具有多个值,则这将不起作用。 - 另一方面,如果您的转换器设计为通过 ID 加载实体,那么 Converter
就是正确的选择。
如果您想构建一种自动注册转换器的方法,请查看此答案 https://stackoverflow.com/a/13778502/280244
关于java - 将请求参数转换为泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149698/