Spring MVC-TIL (10)
[参考講座]金英漢のSpring MVC 1編-バックエンドWeb開発キーテクノロジー
サーバ上で応答データを作成する方法は大きく3つあります静的リソース Yes)Webブラウザで静的HTML、css、jsを提供する場合の静的リソースの使用 ビューテンプレートの使用 Yes)Webブラウザで動的HTMLを提供する場合は、ビューテンプレート を使用してください.
HTTPメッセージの使用 Yes)HTTP APIを提供している場合は、HTMLではなくHTTPメッセージ本体にデータを送信する必要があるため、JSON形式でHTTPメッセージ本体にデータを送信する
Springブートは、クラスパスの次のディレクトリの静的リソースを提供します.
/static,/public,/resources,/META-INF/resources
src/main/resourcesはリソースを保存する場所であり、クラスパスの開始パスでもあります.したがって、次のディレクトリにリソースを配置すると、springブートは静的リソースとしてサービスを提供します.
ビューテンプレートからHTMLを生成し、ビューはレスポンスを作成して渡します.
Spring Bootは、デフォルトのビューテンプレートパスを提供します.
ビューテンプレートパス
@ResponseBodyがない場合は、response/helloを使用してViewResolverを実行してビューを検索およびレンダリングします.
@ResponseBodyがある場合は、ViewResolverを実行せずに、HTTPメッセージ本体にresponse/hello文字を直接入力します.
ビューの論理名実行:templates/response/hello.html
@ResponseBodyとHttpEntityを使用すると、ビューテンプレートではなくHTTPメッセージボディに応答データを直接出力できます.
HTTP APIが提供されると、JSON形式でHTTPメッセージ本体にデータが送信される.
サーブレットを直接処理するように、HTTPメッセージ本体には、HttpサーブレットResponseオブジェクトを介してok応答メッセージが直接伝達される.
responseEntityエンティティはHttpEntityを継承し、HttpEntityはHTTPメッセージのタイトルとマスター情報を有する.ResponseEntityでは、HTTPレスポンスコードを設定することもできます.
responseBodyV3
@ResponseBodyを使用すると、viewを使用せずにHTTPメッセージ変換器から直接HTTPメッセージを入力できます.ResponseEntityも同様に動作します.
responseBodyJsonV1
フィードバックフィードバック.HTTPメッセージ変換器でJSON形式に変換して返します.
responseBodyJsonV2
ResponseEntityではHTTPレスポンスコードを設定できますが、@ResponseBodyではこれらを設定するのは難しいです.
@ResponseStatus(HttpStatus.OK)を使用してプレゼンテーションを行い、レスポンスコードを設定することもできます.
@RestController
@RestControllerを使用すると、これらのコントローラはすべて@ResponseBodyの効果を有します.したがって、ビューテンプレートではなく、HTTPメッセージ本体に直接データを入力します.その名の通り、REST APIを作成する際に使用されるコントローラです.
参照として,@ResponseBodyはクラスレベルで全方法に適用され,@RestControllerはノイズに@ResponseBodyを適用した.
HTTP APIのように直接HTTPメッセージ本体からJSONデータを読み込んだり書き込んだりすれば、HTTPメッセージ変換器を使うと便利です.
使用@ResponseBody HTTPのBODY直接文字内容を返す HttpMessageConverterがViewResolverに取って代わる動作 デフォルト文字処理:StringHttpMessageConverter デフォルトオブジェクト処理:MappingJackson 2 HttpMessageConverter Spring MVCは以下の場合にHTTPメッセージ変換器を適用する.HTTPリクエスト:@RequestBody,HttpEntity HTTP応答:@ResponseBody,HTTPEntity HTTPメッセージ変換器は、HTTP要求とHTTP応答を同時に使用する.canRead()、canWrite():メッセージ変換器がクラスをサポートしているかどうかを確認します.メディアタイプ read()、write():メッセージ変換器によるメッセージの読み書き スプリングガイドは、ターゲットクラスタイプとメディアタイプを確認することによって、使用するかどうかを決定します.気に入らない場合は、次のメッセージコンバータに移動します.ByteArrayHttpMessageConverter:byte[]データを処理します. クラスタイプ:byte[],メディアタイプ:/ リクエスト例)@RequestBody byte[]data 応答例)@ResponseBody return byte[]
書き込みメディアタイプアプリケーション/octet-stream StringHttpMessageConverter:String文字でデータ処理を行います. カテゴリ:String、Media Type/ リクエスト例)@RequestBody String data 応答例)@ResponseBody return"OK"
書き込みメディアタイプtext/plain MappingJackson2HttpMessageConverter: application/json クラスタイプ:オブジェクトまたはHashMap、メディアタイプアプリケーション/json関連 要求例)@RequestBody HelloDataデータ 応答例)@ResponseBody return helloData
書き込みメディアタイプアプリケーション/json
リクエストマッピングhandler depter構造はよく理解できないので、もっと理解して整理します.🤫
💡 スプリングMVC-基本機能
HTTP応答-静的リソース、ビューテンプレート
サーバ上で応答データを作成する方法は大きく3つあります
静的リソース
Springブートは、クラスパスの次のディレクトリの静的リソースを提供します.
/static,/public,/resources,/META-INF/resources
src/main/resourcesはリソースを保存する場所であり、クラスパスの開始パスでもあります.したがって、次のディレクトリにリソースを配置すると、springブートは静的リソースとしてサービスを提供します.
静的リソースパス
src/main/resources/static
ファイルが次のパスに含まれている場合:src/main/resources/static/basic/hello-form.html
Webブラウザで次の操作を行います.http://localhost:8080/basic/hello-form.html
静的リソースは、ファイルを変更せずにそのままサービスを提供します.ビューテンプレート
ビューテンプレートからHTMLを生成し、ビューはレスポンスを作成して渡します.
Spring Bootは、デフォルトのビューテンプレートパスを提供します.
ビューテンプレートパス
src/main/resources/templates
ビューテンプレートの作成<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p th:text="${data}">empty</p>
</body>
</html>
ビューテンプレートを呼び出すコントローラ@Controller
public class ResponseViewController {
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data","hello!");
return "response/hello";
}
//권장 X
@RequestMapping("/response/hello")
public void responseViewV3(Model model) {
model.addAttribute("data","hello!");
}
}
String-ViewまたはHTTPメッセージが返された場合
@ResponseBodyがない場合は、response/helloを使用してViewResolverを実行してビューを検索およびレンダリングします.
@ResponseBodyがある場合は、ViewResolverを実行せずに、HTTPメッセージ本体にresponse/hello文字を直接入力します.
ビューの論理名
response.hello
を返すと、次のパスのビューテンプレートがレンダリングされます.HTTPメッセージ
@ResponseBodyとHttpEntityを使用すると、ビューテンプレートではなくHTTPメッセージボディに応答データを直接出力できます.
HTTPは-HSTP APIに応答し、メッセージ本体に直接入力する
HTTP APIが提供されると、JSON形式でHTTPメッセージ本体にデータが送信される.
ResponseBodyController
@Slf4j
@Controller
@ResponseBody
// @RestController
public class ResponseBodyController {
@GetMapping("/response-body-string-v1")
public void responseBodyV1(HttpServletResponse response) throws IOException {
response.getWriter().write("ok");
}
@GetMapping("/response-body-string-v2")
public ResponseEntity<String> responseBodyV2(HttpServletResponse response) throws IOException {
return new ResponseEntity<>("ok", HttpStatus.OK);
}
// @ResponseBody
@GetMapping("/response-body-string-v3")
public String responseBodyV3() {
return "ok";
}
@GetMapping("/response-body-json-v1")
public ResponseEntity<HelloData> responseBodyJsonV1() {
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return new ResponseEntity<>(helloData, HttpStatus.OK);
}
@ResponseStatus(HttpStatus.OK)
// @ResponseBody
@GetMapping("/response-body-json-v2")
public HelloData responseBodyJsonV2() {
HelloData helloData = new HelloData();
helloData.setUsername("userA");
helloData.setAge(20);
return helloData;
}
}
responseBodyV1サーブレットを直接処理するように、HTTPメッセージ本体には、HttpサーブレットResponseオブジェクトを介してok応答メッセージが直接伝達される.
response.getWriter().write("ok")
responseBodyV2responseEntityエンティティはHttpEntityを継承し、HttpEntityはHTTPメッセージのタイトルとマスター情報を有する.ResponseEntityでは、HTTPレスポンスコードを設定することもできます.
responseBodyV3
@ResponseBodyを使用すると、viewを使用せずにHTTPメッセージ変換器から直接HTTPメッセージを入力できます.ResponseEntityも同様に動作します.
responseBodyJsonV1
フィードバックフィードバック.HTTPメッセージ変換器でJSON形式に変換して返します.
responseBodyJsonV2
ResponseEntityではHTTPレスポンスコードを設定できますが、@ResponseBodyではこれらを設定するのは難しいです.
@ResponseStatus(HttpStatus.OK)を使用してプレゼンテーションを行い、レスポンスコードを設定することもできます.
@RestController
@RestControllerを使用すると、これらのコントローラはすべて@ResponseBodyの効果を有します.したがって、ビューテンプレートではなく、HTTPメッセージ本体に直接データを入力します.その名の通り、REST APIを作成する際に使用されるコントローラです.
参照として,@ResponseBodyはクラスレベルで全方法に適用され,@RestControllerはノイズに@ResponseBodyを適用した.
HTTPメッセージ変換器
HTTP APIのように直接HTTPメッセージ本体からJSONデータを読み込んだり書き込んだりすれば、HTTPメッセージ変換器を使うと便利です.
@ResponseBodyの原理を使う
使用
書き込みメディアタイプアプリケーション/octet-stream
書き込みメディアタイプtext/plain
書き込みメディアタイプアプリケーション/json
リクエストマッピングhandler depter構造はよく理解できないので、もっと理解して整理します.🤫
Reference
この問題について(Spring MVC-TIL (10)), 我々は、より多くの情報をここで見つけました https://velog.io/@yulhee741/Spring-MVC-TIL-10テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol