Spring Boot MockMvc获取模糊的处理程序方法

kh212irz  于 2023-08-04  发布在  Spring
关注(0)|答案(1)|浏览(108)

我有这些控制器:

@PostMapping(
  value = Endpoints.GET_PRICE,
    produces = MediaType.APPLICATION_JSON_VALUE,
    headers = {"Accept=*/*"})
public ResponseEntity<PricesResponse> getPrice(
  @RequestBody @Validated({PriceRequestValidationCheck.class}) PriceRequest priceRequest) {
  PricesResponse defaultPriceResponse =
    priceService.generateAllPricesForWeb(priceRequest, Optional.empty());
  return ResponseEntity.ok(defaultPriceResponse);
}

@PostMapping(
  value = Endpoints.GET_PRICE,
    produces = MediaType.APPLICATION_JSON_VALUE,
    headers = {"Accept=application/vnd.price.v2+json"})
public ResponseEntity<PricesResponse> getPriceV2(
  @RequestBody @Validated({PriceRequestValidationCheckV2.class}) PriceRequest priceRequest, HttpServletRequest request) {
  PricesResponse defaultPriceResponse =
    priceService.generateAllPricesForWeb(
      priceRequest,
        Optional.of(
          request
            .getHeader("Accept")
            .replace("application/vnd.price.v", "")
            .replace("+json", "")));
return ResponseEntity.ok(defaultPriceResponse);
}

字符串
当我执行一个测试,它运行:

private MvcResult callPriceEndPoint(MediaType acceptHeader) throws Exception {
  return mockMvc
    .perform(
      MockMvcRequestBuilders.post(GET_PRICE_PATH)
        .content(getJsonString(getPriceRequest()))
        .contentType(MediaType.APPLICATION_JSON)
        .accept(acceptHeader))
          .andExpect(status().is5xxServerError())
          .andReturn();
}


它给出了这个错误:
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.IllegalStateException:为“/API/price”Map的处理程序方法不明确:{public...
Endpoints.GET_PRICE/api/price
我知道callPriceEndPoint不知道使用哪个控制器,但我该如何解决这个问题?

idfiyjo8

idfiyjo81#

仅使用不同的URL是可能的。表示@postmapping,值对于每个方法应该是唯一的。
@postmapping(value="/API/price”)不能与其他postMap一起使用。在你的例子中,你用同一个urlMap了两个post方法。将一个值更改为除了“url/price”之外的不同url,它将起作用

相关问题