То, что вы запрашиваете, невозможно, потому что вы не можете избежать requestMapping на уровне класса, который не имеет смысла, потому что на уровне класса означает, что вы хотите, чтобы этот путь влиял на все ваши методы.
Имейте в виду, что RestController имеет тип RESTful и используется requestMapping уровня класса, чтобы избежать добавления одного и того же пути ресурса к каждому методу, поэтому нет смысла иметь метод, который не может вписаться в этот ресурс (вы вместо этого следует переместить его на другой контроллер).
Как говорится, есть несколько вещей, которые вы можете попробовать:
1 Это не рекомендуется. Используйте более одного значения пути для вашего класса @ResquestMapping
, в вашем случае:
@RestController
@RequestMapping("/{id}", "/")
public class MyController{...}
Вы можете добиться того, чего хотите, с этим, но это чрезвычайно
обескураживает и пахнет кодом, потому что в основном означает, что все ваши методы будут принимать пути URL либо начиная с id, либо с /, подумайте внимательно, если вы хотите использовать этот подход.
2 Рекомендуемый . Удалите @RequestMapping
на уровне класса и просто обновите путь для каждого метода, в вашем случае:
@RestController
public class MyController {
@GetMapping(value = /{id})
public String get(@PathVariable String id) {
...
}
@PostMapping(value = "/{id}")
public String post(@PathVariable String id, Payload payload) {
...
}
@GetMapping("/deeper/{id}")
public String getDeeper(@PathVariable String id) {
....
}
}
3 также рекомендуется Просто переместите метод, который не вписывается в "общую логику" вашего контроллера, в другой класс контроллера, который имеет смысл, поскольку на этот метод не влияет общая логика контроллера.