首页 > 解决方案 > 尝试在 IntelliJ 中进行结构替换

问题描述

我想将我的注释从@RequestMapping 替换为@GetMapping、@PutMapping ...注释。当我查看 IntelliJ 中的结构查找/替换时,它看起来可以完成这项工作。

我尝试在搜索中添加以下内容

@RequestMapping( $key$ = $value$) 在键上添加了一个过滤器。文本=方法。

现在我想从值 (RequestMethod.GET) 中提取 ,之后的单词。(时期)。然后在替换中添加

@[Word(TitleCase)]Mapping([除了在搜索中提取的键、值之外的所有内容])

一直无法弄清楚如何解决这个问题。很高兴知道这是否无法完成,或者有关如何执行此操作的任何建议。在 SO 上查看了其他一些问题,但没有找到任何可以帮助的东西。大多数答案是在这些情况下使用正则表达式。

前:

@RequestMapping(
    value = "/channels/{channel_name}",
    method = RequestMethod.POST,
    produces = MediaType.APPLICATION_JSON_VALUE,
    consumes = MediaType.APPLICATION_JSON_VALUE)
public Channel updateChannel(
    @PathVariable("channel_name") String channelName,
    @Valid @RequestBody Channel channel) {
  return channelService.updateChannel(channelName, channel);
}

@RequestMapping(
    value = "/channels/{channel_name}",
    method = RequestMethod.DELETE,
    produces = MediaType.APPLICATION_JSON_VALUE)
public Channel deleteChannel(
    @PathVariable("channel_name") String channelName) {
  return channelService.deleteChannel(channelName);
}

@PostMapping(value = "/channels/{channel_name}",
    produces = MediaType.APPLICATION_JSON_VALUE,
    consumes = MediaType.APPLICATION_JSON_VALUE)
public Channel updateChannel(
    @PathVariable("channel_name") String channelName,
    @Valid @RequestBody Channel channel) {
  return channelService.updateChannel(channelName, channel);
}

@DeleteMapping(
    value = "/channels/{channel_name}",
    produces = MediaType.APPLICATION_JSON_VALUE)
public Channel deleteChannel(
    @PathVariable("channel_name") String channelName) {
  return channelService.deleteChannel(channelName);
}

标签: intellij-ideastructural-search

解决方案


我会用正则表达式做这个肮脏的:

  1. 替换RequestMethod.(.)(.+)(?=,)RequestMethod.\U$1\L$2\L 会将文本转换为小写。)
  2. 替换@RequestMapping\((\s+)(.+)(\s+?)(.+)RequestMethod.(.+?),@$5Mapping\($1$2$3.

然后简化这个替换链:

替换@RequestMapping\((\s+)(.+)(\s+?)(.+)RequestMethod.(\S)(.+?),@\U$5\L$6\EMapping\($1$2

更新:注意到第一个参数value未指定是否在行@Mapping或独立行中。

  • 如果您需要它在 的行中@Mapping,请替换@RequestMapping\((\s+)(.+)(\s+?)(.+)RequestMethod.(\S)(.+?),\s@\U$5\L$6\EMapping\($2$3
  • 如果您需要它到独立行,请替换@RequestMapping\((\s+)(.+)(\s+?)(.+)RequestMethod.(\S)(.+?),@\U$5\L$6\EMapping\($1$2.

推荐阅读