Контроллер с двумя методами с одним и тем же путемJAVA

Программисты JAVA общаются здесь
Anonymous
 Контроллер с двумя методами с одним и тем же путем

Сообщение Anonymous »

У меня есть контроллер: < /p>

Код: Выделить всё

@Controller
public class SearchController
< /code>
В этом контроллере у меня есть два метода: < /p>
@RequestMapping(value = SEARCH_BY_FILTERS_ALL_PRODUCTS_NEW, method= {RequestMethod.GET, RequestMethod.POST}, headers = CONTENT_TYPE_JSON)
@Secured(Permissions.VIEW_PRODUCTS)
@ResponseBody
public AjaxJsonResponseBuilder searchAllProductsJson(@RequestBody SearchFiltersRequest request) {
return search(request);
}

@RequestMapping(value = SEARCH_BY_FILTERS_ALL_PRODUCTS_NEW)
@Secured(Permissions.VIEW_PRODUCTS)
@ResponseBody
public AjaxJsonResponseBuilder searchAllProducts(SearchFiltersRequest request) {
return search(request);
}
В данном случае приложение увеличивается.
Когда я нажимаю конечную точку без дополнительных параметров, он вызывает первый метод и работает.
Когда я нажимаю конечную точку с помощью дополнительного параметра, например, дата, которую я вижу в инструментах разработчика в пользовательском интерфейсе: post http: // localhost: 7123/products/search/filters/all/new 400 (плохой запрос), и он никогда не достигает Любой из этих двух методов. < /p>
2nd try - Когда я добавляю заголовок ко второму методу: < /p>

Код: Выделить всё

@RequestMapping(value = SEARCH_BY_FILTERS_ALL_Products_NEW, method= {RequestMethod.GET, RequestMethod.POST}, headers = CONTENT_TYPE_JSON)
@Secured(Permissions.VIEW_PRODUCTS)
@ResponseBody
public AjaxJsonResponseBuilder searchAllProductsJson(@RequestBody SearchFiltersRequest request) {
return executeSearch(request);
}

@RequestMapping(value = SEARCH_BY_FILTERS_ALL_PRODUCTS_NEW, headers = "!Content-type=application/json")
@Secured(Permissions.VIEW_PRODUCTS)
@ResponseBody
public AjaxJsonResponseBuilder searchAllProducts(SearchFiltersRequest request) {
return executeSearch(request);
}
< /code>
В этом случае он такой же, как и ранее - приложение увеличивается, поиск без даты работает, но когда я добавляю параметр, конечная точка не нажима. < /p>
3 -я попытка - удалить Method = {requestMethod.get, requestMethod.post} 
из первого метода:

Код: Выделить всё

@RequestMapping(value = SEARCH_BY_FILTERS_ALL_PRODUCTS_NEW, headers = CONTENT_TYPE_JSON)
@Secured(Permissions.VIEW_PRODUCTS)
@ResponseBody
public AjaxJsonResponseBuilder searchAllProductsJson(@RequestBody SearchFiltersRequest request) {
return executeSearch(request);
}

@RequestMapping(value = SEARCH_BY_FILTERS_ALL_PRODUCTS_NEW)
@Secured(Permissions.VIEW_PRODUCTS)
@ResponseBody
public AjaxJsonResponseBuilder searchAllProducts(SearchFiltersRequest request) {
return executeSearch(request);
}
< /code>
В данном случае приложение даже не допускается с ошибкой: < /p>
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'searchController' method
search.controller.SearchController#searchAllProducts(SearchFiltersRequest)
to { [products/search/filters/all/new]}: There is already 'searchController' bean method
search.controller.SearchController#searchAllProductsJson(SearchFiltersRequest) mapped.
Я также заметил, что у меня есть много параметров для фильтрации, и я могу добавить их, они будут применены, а Searchallinstrumentsjson будет нанесен. Когда я просто добавляю какую -либо дату, например, дату создания, тогда она больше не достигает ни одной конечной точки. что, когда я ищу без даты, тогда в < /p>

Код: Выделить всё

f.send(w || a.data == null ? null : a.data);
< /code>
a.data
- это "{" rea ":" aq "," location ":" eng "," семья ": null, status": "active", "startDate": null} "
И когда я добавляю дату (которая портит конечную точку). : null, "status": "Active", "startDate": "02/03/2025"
Так что не большая разница, но сначала работает и не сбои. /p>
Как я могу исправить этот контроллер? < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -same-path

Вернуться в «JAVA»