【问题标题】:Trying to do a structural replace in IntelliJ尝试在 IntelliJ 中进行结构替换
【发布时间】:2019-07-06 18:35:14
【问题描述】:

我想将我的注释从@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-idea structural-search


    【解决方案1】:

    我会用正则表达式来做这件事:

    1. RequestMethod.(.)(.+)(?=,) 替换为RequestMethod.\U$1\L$2 (\L would turn the text into lowercase.)
    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

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多