将 Spring ModelAttribute 应用于所有使用特定参数类型的控制器

2024-05-11

在 Spring Boot REST 应用程序中,我有一个TableRequest包含表格数据 GET 请求的列排序、筛选和分页详细信息的类型。它是通用的,因为它不关心所请求的具体数据是什么,它只指定通用表参数。因此它适用于许多不同的控制器方法。此外,因为它适用于 GET 请求,所以字段作为请求参数传递(无@RequestBodyjson 参数)。我有一个@ModelAttribute控制器类中的方法,将请求参数解析为TableRequest对象,然后是实际的@RequestMapping方法接收该对象作为@ModelAttribute范围。

因为TableRequest类是通用的,我希望能够跨多个控制器使用它,而不必将解析逻辑复制到每个控制器中。我想知道是否有基于 Spring-y 注释的重用方法@ModelAttribute任何时候控制器有一个方法TableRequest输入参数。

提前致谢 :)


我的解决方案(基于下面选定的答案)

我创建了一个@TableRequestController注释和相应的@ControllerAdvice类仅适用于具有该注释的控制器类。该 ControllerAdvice 类包括@ModelAttribute方法将 GET 请求参数解析为TableRequest object.

这里一个重要的警告是,新的@TableRequestController只能应用于整个控制器类,而不应用于单个控制器方法。因此,我创建了一个单独的内部控制器类,用该注释标记,其 @RequestMapping 方法都接受 TableRequest 对象。

@TableRequestController:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TableRequestController {}

控制器建议类:

@ControllerAdvice(annotations = TableRequestController.class)
public class TableRequestControllerAdvice {

    @ModelAttribute
    public TableRequest tableRequest(
            @RequestParam Map<String, String> params,
            @RequestParam int pageStart,
            @RequestParam int pageSize) {

        return new TableRequest(params, pageStart, pageSize);
    }
}

TableRequest REST 控制器类:

@RestController
@TableRequestController
public static class MyTableRequestController {

    @RequestMapping("/the/table/request/url")
    public MyResponse makeTableRequest(
            TableRequest tableRequest) {

        return new MyResponse(tableRequest);
    }
}

您可以使用@ControllerAdvice。此处定义的所有内容都适用于所有控制器或定义的子集(如果您愿意)。

文档 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-controller-advice

另一种选择(更好的恕我直言)是写一个消息转换器 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-message-converters。它只处理一种特定类型。你不再需要@ModelAttribute但只是有一个TableRequest控制器方法中的参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Spring ModelAttribute 应用于所有使用特定参数类型的控制器 的相关文章

随机推荐