小编ped*_*rro的帖子

vim - 在'replace'表达式中调用函数

我知道你可以在vim搜索/替换操作中调用一个函数.例如:

%s/regex/\=localtime()/g
Run Code Online (Sandbox Code Playgroud)

将使用当前纪元时间替换匹配"正则表达式"的任何内容.问题是,我无法在'replace'表达式中添加任何其他内容.例如:

%s/regex/epoch: \=localtime()/g
Run Code Online (Sandbox Code Playgroud)

不再将'localtime'视为一种功能.相反,它只是在替换文本中将'epoch:= localtime()'打印为字符串.目的是打印'epoch:1353085984'.

有没有办法从替换表达式的任意部分内调用函数?

vim

13
推荐指数
1
解决办法
1320
查看次数

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

在 SpringBoot REST 应用程序中,我有一个TableRequest类型,其中包含表格数据 GET 请求的列排序、过滤和分页详细信息。它是通用的,因为它不关心所请求的具体数据是什么,它只指定通用表参数。因此它适用于许多不同的控制器方法。此外,因为它适用于 GET 请求,所以字段作为请求参数传递(无@RequestBodyjson 参数)。我在控制器类中有一个@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, …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc

5
推荐指数
1
解决办法
3614
查看次数

标签 统计

java ×1

spring ×1

spring-mvc ×1

vim ×1