Spring - можно ли дать такой же URL в запросе отображения метода post? - PullRequest
0 голосов
/ 28 ноября 2018

Возможно ли использовать один и тот же URL-адрес в отображении запроса для двух разных методов post, отличается только тело запроса.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Нет, вы не можете указать один и тот же URL-адрес при отображении запроса для метода post, имеющего другой тип тела запроса, но одинаковый тип носителя.Ниже не будет работать:

  @PostMapping(path = "/hello", consumes = MediaType.APPLICATION_JSON_VALUE)
  public String hello(@RequestBody Pojo1 val) {
    return "Hello";
  }

  @PostMapping(path = "/hello", consumes = MediaType.APPLICATION_JSON_VALUE)
  public String hello(@RequestBody Pojo2 val) {
    return "Hello";
  }

Если у вас другой тип носителя, он будет работать.Ниже будет работать:

  @PostMapping(path = "/hello", consumes = MediaType.APPLICATION_JSON_VALUE)
  public String hello(@RequestBody Pojo val) {
    return "Hello";
  }

  @PostMapping(path = "/hello", consumes = MediaType.TEXT_PLAIN_VALUE)
  public String hello(@RequestBody String val) {
    return "Hello";
  }

Ваш RequestMapping должен отличаться хотя бы по одному из условий;path,method,params,headers,consumes,produces

0 голосов
/ 28 ноября 2018

Да, вы можете сделать это, но вам нужно указать уникальную подпись параметров в аннотации RequestMapping:

public class MyController {

@RequestMapping(method = RequestMethod.POST, params = {"!name", "!name2"})
public String action(HttpServletRequest request, HttpServletResponse response){
    // body
}

@RequestMapping(method = RequestMethod.POST, params = "name")
public String action(HttpServletRequest request, HttpServletResponse response,
                        @RequestParam(value = "name", required = true) String name) {
    // body
}

}

`

...