利用MVC(4):HTTPリクエストの第3部-メディアタイプのマッピング
4.HTTPリクエストのマッピング3部-メディアタイプ
特定のタイプのデータを含む要求のみを処理するプロセッサ
既存のコード
@Controller
public class SampleController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "hello";
}
}
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void helloTest() throws Exception{
mockMvc.perform(get("/hello"))
.andDo(print())
.andExpect(status().isOk());
}
}
プロセッサがjsonを送信する場合にのみ、リクエストを処理します.@Controller
public class SampleController {
// @RequestMapping(value = "/hello", consumes = "applications/json")
@RequestMapping(value="/hello", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public String hello(){
return "hello";
}
}
文字列として入力するとエラーが発生しやすいので、文字列を入力しない場合はMediaTypeを使用して定数(IDE)を自動的に完了できます.Content-Type Headerは、要求本文がどのようなフォーマットのデータであるかを教えてくれます.
テストコード
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void helloTest() throws Exception{
mockMvc.perform(get("/hello")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andDo(print())
.andExpect(status().isOk());
}
}
特定のタイプのレスポンスを生成するハンドル要求を送信する側は、受信ヘッダを設定することができる.
@RunWith(SpringRunner.class)
@WebMvcTest
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void helloTest() throws Exception{
mockMvc.perform(get("/hello")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8))
.andDo(print())
.andExpect(status().isOk());
}
}
純粋なテキストを生成することを明示した場合、テストは失敗します.@Controller
public class SampleController {
@RequestMapping(value="/hello",
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
produces = MediaType.TEXT_PLAIN)
@ResponseBody
public String hello(){
return "hello";
}
}
クラスに宣言された@Request Mappingと組み合わせるのではなく、メソッドの@Request Mapping設定で上書きします.@Controller
@RequestMapping(consumes = MediaType.APPLICATION_XML_VALUE)
public class SampleController {
@RequestMapping(value="/hello",
consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
produces = MediaType.TEXT_PLAIN)
@ResponseBody
public String hello(){
return "hello";
}
}
URL値とは異なり、メソッドはクラスの設定を上書きし、相互に組み合わせた関係ではありません.したがって、クラスの設定は適用されず、メソッドの設定のみが適用されます.Not (!)非特定のメディアタイプにマッピングすることもできます.
リファレンス
Reference
この問題について(利用MVC(4):HTTPリクエストの第3部-メディアタイプのマッピング), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/스프링-MVC-활용3-HTTP-요청-맵핑하기-3부-미디어-타입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol