Разница между аннотациями @GetMapping и @RequestMapping (method = RequestMethod.GET)

153

Какая разница между @GetMappingа @RequestMapping(method = RequestMethod.GET)?
Я видел в некоторых примерах Spring Reactive, которые @GetMappingиспользовались вместо@RequestMapping

nowszy94
источник

Ответы:

196

@GetMappingэто составная аннотация, которая действует как ярлык для @RequestMapping(method = RequestMethod.GET).

@GetMappingэто более новая аннотация. Поддерживает расходует

Варианты потребления:

потребляет = "текст / обычный"
потребляет = {"текст / обычный", "приложение / *"}

Подробнее см .: GetMapping Annotation

или прочитайте: запрос вариантов отображения

RequestMapping также поддерживает потребление

GetMapping мы можем применять только на уровне метода, а аннотацию RequestMapping мы можем применять как на уровне класса, так и на уровне метода.

DHS
источник
@GetMappingподдерживает consumes- docs.spring.io/spring-framework/docs/current/javadoc-api/org/…
whoami
3
RequestMapping также поддерживает потребление
Габор
22

Как вы можете видеть здесь :

В частности, @GetMappingэто составная аннотация, которая действует как ярлык для @RequestMapping(method = RequestMethod.GET).

Разница между @GetMapping&@RequestMapping

@GetMappingподдерживает consumesатрибут, как @RequestMapping.

Deroude
источник
14
Хорошие новости! По состоянию на 4/2017, на веб - странице Spring вы связаны, GetMapping ли теперь поддерживает «потребляет» и обычные атрибуты RequestMapping. Наверное, Spring добавил их после вашего поста.
devdanke
10

@RequestMapping это уровень класса

@GetMapping это метод уровня

Спринт Весна 4.3. и до вещи изменились. Теперь вы можете использовать @GetMapping для метода, который будет обрабатывать http-запрос. Спецификация класса @RequestMapping уточняется с помощью аннотации @GetMapping (уровня метода)

Вот пример:

@Slf4j
@Controller
@RequestMapping("/orders")/* The @Request-Mapping annotation, when applied
                            at the class level, specifies the kind of requests 
                            that this controller handles*/  

public class OrderController {

@GetMapping("/current")/*@GetMapping paired with the classlevel
                        @RequestMapping, specifies that when an 
                        HTTP GET request is received for /order, 
                        orderForm() will be called to handle the request..*/

public String orderForm(Model model) {

model.addAttribute("order", new Order());

return "orderForm";
}
}

До весны 4.3 было @RequestMapping(method=RequestMethod.GET)

Дополнительное чтение из книги, автором которой является Крейг Уоллс Дополнительное чтение из книги, автором которой является Крейг Уоллс

зет
источник
1
@RequestMapping также можно применять к методу.
Чжао Ган
Да, это может быть. Однако @GetMapping более лаконичен и специфичен для метода HTTP, на который он нацелен.
Зи
3

Короткий ответ:

Нет разницы в семантике.

В частности, @GetMapping - это составная аннотация, которая действует как ярлык для @RequestMapping (method = RequestMethod.GET).

Дальнейшее чтение:

RequestMapping может использоваться на уровне класса:

Эта аннотация может использоваться как на уровне класса, так и на уровне метода. В большинстве случаев на уровне методов приложения предпочитают использовать один из конкретных вариантов метода HTTP @GetMapping, @PostMapping, @PutMapping, @DeleteMapping или @PatchMapping.

в то время как GetMappingотносится только к методу:

Аннотация для отображения запросов HTTP GET на определенные методы-обработчики.


https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/GetMapping.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

ZhaoGang
источник