我有这些控制器:
@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
不知道使用哪个控制器,但我该如何解决这个问题?
1条答案
按热度按时间idfiyjo81#
仅使用不同的URL是可能的。表示@postmapping,值对于每个方法应该是唯一的。
@postmapping(value="/API/price”)不能与其他postMap一起使用。在你的例子中,你用同一个urlMap了两个post方法。将一个值更改为除了“url/price”之外的不同url,它将起作用