Я хотел бы добиться чего-то подобного с помощью Spring MVC
@RequestMapping(value = "/user/{userId}", method = RequestMethod.DELETE)
@RequestMapping(value = "/user/{userId}/delete", method = RequestMethod.POST)
public void deleteUser(@PathVariable String userId) {
...
}
Это дало бы мне общую конечную точку для вызовов REST и стандартных сообщений HTML-формы. Возможно ли это с Spring MVC? Все, что я могу придумать, это
@RequestMapping(value = { "/user/{userId}", "/user/{userId}/delete"}, method = {RequestMethod.DELETE, RequestMethod.POST})
public void deleteUser(@PathVariable String userId) {
...
}
но результат несколько отличается, потому что POST для "/user/{userId}" также удалит пользователя.
Одна вещь, которую вы можете сделать, это сделать 2 отдельных метода с их собственной аннотацией RequestMapping
, а затем просто передать параметры на другой метод, где вы делаете фактические вещи:
@RequestMapping(value = "/user/{userId}/delete", method = RequestMethod.POST)
public void deleteUserPost(@PathVariable String userId) {
deleteUser(userId);
}
@RequestMapping(value = "/user/{userId}", method = RequestMethod.DELETE)
public void deleteUserDelete(@PathVariable String userId) {
deleteUser(userId);
}
private void deleteUser(String userId){
//Do things here
}
Извините, это неправильно.
В зрелой архитектуре REST код должен использовать URL-адрес для ссылки на ресурс и использовать метод HTTP для определения действия на ресурсе. Поэтому просто определите @RequestMapping("/user/{userId}/delete", method = RequestMethod.DELETE)
и устраните POST. См. DELETE vs POST.