ped*_*rro 5 java spring spring-mvc
在 SpringBoot REST 应用程序中,我有一个TableRequest
类型,其中包含表格数据 GET 请求的列排序、过滤和分页详细信息。它是通用的,因为它不关心所请求的具体数据是什么,它只指定通用表参数。因此它适用于许多不同的控制器方法。此外,因为它适用于 GET 请求,所以字段作为请求参数传递(无@RequestBody
json 参数)。我在控制器类中有一个@ModelAttribute
方法,它将请求参数解析为一个TableRequest
对象,然后实际的@RequestMapping
方法接收该对象作为@ModelAttribute
参数。
因为该类TableRequest
是通用的,所以我希望能够跨多个控制器使用它,而不必将解析逻辑复制到每个控制器中。我想知道是否有一种基于 Spring-y 注释的方法可以@ModelAttribute
在控制器有TableRequest
输入参数时重用相同的方法。
提前致谢 :)
我的解决方案(基于下面选定的答案)
我创建了一个@TableRequestController
注释和一个相应的@ControllerAdvice
类,该类仅适用于具有该注释的控制器类。该 ControllerAdvice 类包含@ModelAttribute
将 GET 请求参数解析为TableRequest
对象的方法。
这里一个重要的警告是,新的@TableRequestController
可能仅适用于整个控制器类,而不适用于单个控制器方法。因此,我创建了一个单独的内部控制器类,用该注释标记,其 @RequestMapping 方法都接受 TableRequest 对象。
@TableRequestController:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TableRequestController {}
Run Code Online (Sandbox Code Playgroud)
控制器建议类:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
TableRequest REST 控制器类:
@RestController
@TableRequestController
public static class MyTableRequestController {
@RequestMapping("/the/table/request/url")
public MyResponse makeTableRequest(
TableRequest tableRequest) {
return new MyResponse(tableRequest);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3614 次 |
最近记录: |