Springリクエストマッピング
11910 ワード
詳細は正式な書類に記載されていますが、必要に応じてよく読むことをお勧めします.
DispatcherServiceletの操作中、Request MappingHandlerという特殊なbeanが要求を処理するためにHandlerを検索します.
ここで、Handlerは、開発者が外部リクエストをどのように処理するかを説明します.
ユーザの要求がどのHandlerによって処理されるべきかを決定する方法は複数あります. HTTP Method URI Pattern MediaType (by Content-Type, Accept Header) ヘッダーがParameterと一致するかどうか また,スプリングによって自動的に処理される
簡単なHandler定義とテスト
MediaTypeによるリクエストのマッピング
Content-Type 要求されたデータ型を表すヘッダー. Accept 返信するデータ型を示すヘッダー.
Spring MVCは、以下に示すように、要求されたクライアントがどのタイプのデータを送信するか、およびどのタイプの応答を受信するかを示すために、Handlerマッピングを使用することができる.
各MediaTypeはSpringの
先ほど紹介した
リーダー指定時は 特定リーダの値が特定値である場合、 パラメータ指定時は 特定パラメータの値が特定値の場合、 Handlerマッピングは上記の条件で処理してもよい.Head, OPTIONS HTTP METHOD
DispatcherServiceletの操作中、Request MappingHandlerという特殊なbeanが要求を処理するためにHandlerを検索します.
ここで、Handlerは、開発者が外部リクエストをどのように処理するかを説明します.
ユーザの要求がどのHandlerによって処理されるべきかを決定する方法は複数あります.
HEAD
とOPTIONS
の方法も紹介した.簡単なHandler定義とテスト @Controller
public class EventController {
// @RequestMapping("/hello", method=RequestMethod.GET)
@GetMapping("/hello")
@ResponseBody
public String events() {
return "Hello";
}
}
@Controller
においてHandlerを定義することにより、GET /events
要求に対して適切なウェブページまたはデータを簡単に応答として提供することができる.
Handler Test
Springが提供するMockMvc
beanを使用すると、Handlerを作成し、予想通りにテストできます.
JUnit 5では、次のコードを使用してテストできます.@AutoConfigureMockMvc
を適用して、MockMvcを空に注入することができる.@SpringBootTest
@AutoConfigureMockMvc
class HelloControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void test1() {
mockMvc.perform(get("/hello")
.andExpect(status().isOk())
.andExpect(content().string("Hello"));
}
}
MockMvc
は、作成されたHandlerをテストするための要求を作成し、適切な応答が受信されたかどうか、適切なHeader値があるかどうかなど、様々なテストを行うことができる.
MockMvcに慣れると、Handlerを簡単にテストできます.
HTTPメソッドによるリクエストのマッピング
要求されたHTTPメソッドに従ってHandlerをマッピングできます.
前述したように、@RequestMapping
を使用してHandlerを定義することができる.
Springは複合Annotationを使用して簡潔なハンドルを定義し、@RequestMapping
が拡張されたHTTPメソッド@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
、@DeleteMapping
、および@PatchMapping
Annotationに対応する.
URIモードによる要求マッピング
最も基本的なHandlerマッピングとURI文字列に基づいてマッピングされます.Springは、さまざまな文字列アレイマッピングを提供します.
@Controller
public class EventController {
// @RequestMapping("/hello", method=RequestMethod.GET)
@GetMapping("/hello")
@ResponseBody
public String events() {
return "Hello";
}
}
@SpringBootTest
@AutoConfigureMockMvc
class HelloControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void test1() {
mockMvc.perform(get("/hello")
.andExpect(status().isOk())
.andExpect(content().string("Hello"));
}
}
要求されたHTTPメソッドに従ってHandlerをマッピングできます.
前述したように、
@RequestMapping
を使用してHandlerを定義することができる.Springは複合Annotationを使用して簡潔なハンドルを定義し、
@RequestMapping
が拡張されたHTTPメソッド@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
、@DeleteMapping
、および@PatchMapping
Annotationに対応する.URIモードによる要求マッピング
最も基本的なHandlerマッピングとURI文字列に基づいてマッピングされます.Springは、さまざまな文字列アレイマッピングを提供します.
/resources/ima?e.png
- match one character in a path segment/resources/*.png
- match zero or more characters in a path segment/resources/**
- match multiple path segments/projects/{project}/versions
- match a path segment and capture it as a variable/projects/{project:[a-z]+}/versions
- match and capture a variable with a regex@PathVariable
@PathVariable
の動作は、URIの値を変数として入力することを可能にする.@GetMapping("/owners/{ownerId}/pets/{petId}")
public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId) {
// ...
}
pathの.../{owenerId}/...
は、パラメータの名前(ownerId
)と一致し、所望のタイプで得られる.また、@PathVariable("ownerId") Long id
などの明示的な名前でインポートすることもできます.MediaTypeによるリクエストのマッピング
ハンドラをHTTPリクエストにマッピングする場合、主に使用するHTTPヘッダはContent-Type
とAccept
である.
Spring MVCは、以下に示すように、要求されたクライアントがどのタイプのデータを送信するか、およびどのタイプの応答を受信するかを示すために、Handlerマッピングを使用することができる.
@RequestMapping(value="/hello",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
属性値consumes
は、受信したContent-Type
produces
に相当し、応答を表すAccept
ヘッダ値に相当する.各MediaTypeはSpringの
org.springframework.http
パッケージを介して定数形式で提供される._VALUE
は文字列を表します.テスト
先ほど紹介した
MockMvc
を利用して、MediaTypeヘッダ値をテストすることもできます.mockMvc.perform(get("/hello")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk());
上記のようにcontentTypeとacceptを貼り付けて、リクエスト時に適切なプロセッサで処理されていることを確認できます.HeaderとParameterによるHandlerのマッピング
@GetMapping(path = "/pets/{petId}", params = "myParam=myValue")
public void findPet(@PathVariable String petId) {
// ...
}
@GetMapping(path = "/pets", headers = "myHeader=myValue")
public void findPet(@PathVariable String petId) {
// ...
}
Head, OPTIONS HTTP METHOD HEAD
メソッドのハンドルを定義すると、GET
Httpメソッドは自動的にスプリングによって暗黙的に作成されます.HEADメソッドはGETプロセッサ処理の結果のHeaderのみを提供する.(Bodyデータ提供x)
2479142 HTTPメソッドは、2479142言語宣言後に一致するURIモードを定義したHandlerメソッドおよびHTTPメソッドを2479142 Headerに送信する.これはCORSの処理に用いられるため非常に有用である.
整理する
Spring MVCにおける要求マッピングに関する概念を簡単に理解した.次に,要求マッピング後にHandlerが使用する様々なArcgumentタイプと,戻りタイプに関する機能を見てみる.
Reference
この問題について(Springリクエストマッピング), 我々は、より多くの情報をここで見つけました
https://velog.io/@jihoson94/Spring-요청-Mapping-방식
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Spring MVCにおける要求マッピングに関する概念を簡単に理解した.次に,要求マッピング後にHandlerが使用する様々なArcgumentタイプと,戻りタイプに関する機能を見てみる.
Reference
この問題について(Springリクエストマッピング), 我々は、より多くの情報をここで見つけました https://velog.io/@jihoson94/Spring-요청-Mapping-방식テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol