2016-04-07 1 views
1

Я хочу знать, можно ли сопоставить один и тот же URL-адрес с различными методами в классе RestController, основанный только на теле запроса. Например:Сопоставление одного и того же URL-адреса различным методам на основе тела запроса весной

@RequestMapping(value="/delete", method=RequestMethod.POST) 
public void delete(@RequestBody String id) { 
    //do something 
} 

@RequestMapping(value="/delete", method=RequestMethod.POST) 
public void delete(@RequestBody Book book) { 
    //do something 
} 

Тело запроса всегда будет полезной нагрузкой JSON. если это {"id":"foo"} Я хочу, чтобы первый метод вызывался. Если орган запроса:

{ 
    "title":"Spring Guide", 
    "author":"John Doe" 
} 

Я хочу, чтобы второй метод назывался. Это возможно?

+6

Нет. Вы не можете различать на основе полезной нагрузки. –

+0

Основываясь на ваших фрагментах кода, создание более удобного дескриптора 'DELETE' на'/books/{id} '. –

+0

Вы можете попробовать следующее: иметь один аннотированный метод обрабатывать как полезную нагрузку JSON, передавая их как Object i.e. @RequestBody Object obj', а затем преобразовывать его в 'String' или' Book' для его удаления. –

ответ

-1

Невозможно различать только полезную нагрузку.

Основываясь на тестах, которые я сделал здесь, и ответа М. Дейнума и Али Дехгани, я думаю, что лучший способ сделать это - иметь разные URL-адреса для каждого случая. Итак, /books/{id} для удаления по id и /books с JSON объекта в теле, чтобы удалить передачу объекта. Спасибо за все, что прокомментировал.

+1

На самом деле это не ответ на заданный вопрос. Ответ будет «нет, невозможно дифференцировать на основе полезной нагрузки». – eis

Смежные вопросы