java - 将请求参数转换为泛型类

标签 java spring generics spring-mvc

我正在寻求有关 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/

相关文章:

java - 用点构建正则表达式

数组方法参数的 Spring 表达式语言 (SpEL)

spring - Autowiring 按类型键入的所有接口(interface)

class - Delphi 类 TList

Java 泛型——推断嵌套类型

WPF - 可以将 List<T> 用作依赖项属性

java - 如何在android中使用SmsManager将图像文件附加到短信?

android.support.v7.widget.RecyclerView.onMeasure 的 java.lang.NullPointerException

java - Spring MVC 一步一步进入 Maven

java - 设置 null 而不出现 NullPointerException