Что лучше использовать request.getParameter () или @RequestParm?

Какой способ весной считается лучшей практикой в ​​области разработки программного обеспечения:

1) используя аннотацию spring @RequestParam

@RequestMapping(value = "/doSomeThing", method = RequestMethod.GET)
@ResponseBody
public boolean doSomeThing(@RequestParam("name") String name) {
    boolean success = false;
    // do the logic
    return success;
}

2) с помощью метода запроса getParameter

@RequestMapping(value = "/doSomeThing2", method = RequestMethod.GET)
@ResponseBody
public boolean doSomeThing2(HttpServletRequest request) {
    boolean success = false;
    String name = request.getParameter("name");
    // do the logic
    return success;
}

В первую очередь основано на мнении: первое!

luk2302 15.04.2018 19:28

пожалуйста, разместите этот вопрос на codereview.stackexchange.com

arthur 15.04.2018 19:30

То же самое, я предпочитаю первый, позволяющий пропустить некоторый шаблонный код, сделать его более читаемым imo

TheBakker 15.04.2018 19:30

@arthur как таковой, вопрос не по теме CR. Он получил перекрестную публикацию by ayman и сразу был отклонен и закрыт. Пожалуйста, не перенаправляйте пользователей на другие сайты StackExchange, не проверив их правила. Для получения дополнительной информации о CR см. руководство для пользователей SO.

Zeta 15.04.2018 20:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
350
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы использовал аннотацию @RequestParam, потому что в этом случае ваш код будет более читаемый и проще юнит-тест.

Почему читабельнее? Потому что ясно, что вы зависите от HTTP API только для этого единственного параметра. HttpServletRequest - большой объект, с ним можно делать многое. В этом случае вы используете только очень небольшую часть этой функциональности. Код более читабелен, если сигнатура метода максимально конкретна. Параметр типа HttpServletRequest менее специфичен, чем параметр типа String. Это соответствует Принцип разделения интерфейса (клиент должен быть вынужден зависеть от методов, которые он не использует).

Почему проще тестировать? Используя @RequestParam, не надо ничего издеваться! Если у вас есть HttpServletRequest в качестве параметра, то для модульного тестирования вам нужно тщательно имитировать этот объект - осторожно издеваться над каждым вызовом getParameter.

Еще одно преимущество - автоматическое преобразование: RequestParam может быть int, LocalDate, Long и т. д. И правильный ответ об ошибке будет отправлен обратно, если значение не может быть преобразовано.

JB Nizet 15.04.2018 20:01

Да, я согласен с аннотацией @RequestParam, которую я лично использовал в своем Приложение spring-mvc для операций CRUD и многих других операций, таких как отображение сохраненной таблицы на странице jsp и все такое.

Другие вопросы по теме