Różnica między adnotacjami @GetMapping i @RequestMapping (metoda = RequestMethod.GET)

152

Jaka jest różnica między @GetMappingi @RequestMapping(method = RequestMethod.GET)?
Widziałem w niektórych przykładach Spring Reactive, który @GetMappingzostał użyty zamiast@RequestMapping

nowszy94
źródło

Odpowiedzi:

195

@GetMappingto złożona adnotacja, która działa jak skrót do @RequestMapping(method = RequestMethod.GET).

@GetMappingto nowsza adnotacja. Obsługuje konsumuje

Opcje konsumpcji to:

zużywa = "tekst / zwykły"
zużywa = {"tekst / zwykły", "aplikacja / *"}

Aby uzyskać więcej informacji, zobacz: Adnotacja GetMapping

lub przeczytaj: poproś o warianty mapowania

RequestMapping obsługuje również konsumowanie

GetMapping możemy zastosować tylko na poziomie metody, a adnotację RequestMapping możemy zastosować zarówno na poziomie klasy, jak i metody

dhS
źródło
3
RequestMapping obsługuje również konsumenci
Gábor DANI
22

Jak widać tutaj :

W szczególności @GetMappingjest to złożona adnotacja, która działa jak skrót do @RequestMapping(method = RequestMethod.GET).

Różnica między @GetMapping&@RequestMapping

@GetMappingobsługuje consumesatrybut taki jak @RequestMapping.

Deroude
źródło
14
Dobre wieści! Od 4/2017 na stronie Spring, z którą łączysz się, GetMapping obsługuje teraz atrybuty „conses” i zwykłe atrybuty RequestMapping. Prawdopodobnie Spring dodał te po Twoim poście.
devdanke
10

@RequestMapping to poziom klasy

@GetMapping to poziom metody

Ze sprintem Spring 4.3. i wszystko się zmieniło. Teraz możesz użyć @GetMapping w metodzie, która będzie obsługiwać żądanie http. Specyfikacja @RequestMapping na poziomie klasy jest udoskonalana za pomocą adnotacji (na poziomie metody) @GetMapping

Oto przykład:

@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";
}
}

Tak było przed wiosną 4.3 @RequestMapping(method=RequestMethod.GET)

Dodatkowa lektura z książki autorstwa Craiga Wallsa Dodatkowa lektura z książki autorstwa Craiga Wallsa

zee
źródło
1
@RequestMapping można również zastosować do metody.
ZhaoGang
Tak, to może być. Jednak @GetMapping jest bardziej zwięzły i specyficzny dla metody HTTP, do której jest skierowany.
zee
3

Krótka odpowiedź:

Nie ma różnicy w semantyce.

W szczególności @GetMapping to złożona adnotacja, która działa jako skrót do @RequestMapping (metoda = RequestMethod.GET).

Czytaj dalej:

RequestMapping może być używany na poziomie klasy:

Ta adnotacja może być używana zarówno na poziomie klasy, jak i metody. W większości przypadków aplikacje na poziomie metody będą wolały używać jednego z wariantów specyficznych dla metody HTTP @GetMapping, @PostMapping, @PutMapping, @DeleteMapping lub @PatchMapping.

podczas gdy GetMappingdotyczy tylko metody:

Adnotacja do mapowania żądań HTTP GET na określone metody obsługi.


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
źródło