Несколько @RequestMapping (значение, пары методов) в Spring MVC

1

Я хотел бы добиться чего-то подобного с помощью 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}" также удалит пользователя.

Теги:
spring
spring-mvc

2 ответа

5

Одна вещь, которую вы можете сделать, это сделать 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
}
4

Извините, это неправильно.

В зрелой архитектуре REST код должен использовать URL-адрес для ссылки на ресурс и использовать метод HTTP для определения действия на ресурсе. Поэтому просто определите @RequestMapping("/user/{userId}/delete", method = RequestMethod.DELETE) и устраните POST. См. DELETE vs POST.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню