SpringBootコアの作成例(1)(+@Controllerと@RestControllerの違い)
9982 ワード
🔗 スプリングコア原理-プレミアム編
[1]プロジェクトの作成
クライアントは、URI形式でWebサービスに要求を送信する. マッピングされたHandlerおよびそのタイプを検索するDispatcherServeret要求の割り込み. コントローラは要求を処理した後、応答をDispatcherServeretに返し、DispatcherServeretはビューをユーザーに返す. ビューに戻るには、ViewResolverを使用して、ViewResolverの設定に従ってビューを検索してレンダリングします.
ただしSpring MVCのコントローラは、データを返す必要がある場合もあります.
Spring MVCのコントローラは、
これにより、コントローラはJson形式でデータを返すこともできます.
ソース:死刑囚開発者クライアントは、URI形式でWebサービスに要求を送信する. マッピングされたHandlerおよびそのタイプを検索するDispatcherServeret要求の割り込み.
データを返すために、
HttpMessageConverterには複数のConverterが登録されており、必要に応じて返されるデータによって使用するConverterが異なります.
単純
データ型に応じて異なるメッセージConverter操作
SpringクライアントのHTTP受信ヘッダとサーバのコントローラ返却タイプ情報を組み合わせて,適切なHttpMessageConverterを選択して処理する.
もちろん,RestControllerの主な用途はJson形式でオブジェクトデータを返すことである.
(記事の著者によると、VueJs+SpringBootプロジェクトでSpringBootがAPIサーバとして使用されている場合、Androidアプリケーションを開発してデータを返す場合に使用されている)
ソース:死刑囚開発者クライアントは、URI形式でWebサービスに要求を送信する. マッピングされたHandlerおよびそのタイプを検索するDispatcherServeret要求の割り込み. RestControllerは要求を処理し、データ を返す.
1,2プロセスは同じ
リファレンス
[1]プロジェクトの作成
🔗 新規プロジェクトの作成
[2]サンプルアイテムの作成-V 0
:バージョン0を使用して最も簡単な例を作成
商品注文プロセスと仮定すると、一般的なWebアプリケーションではController → Service → Repository
ストリームが最大限に簡略化される.
✔️ OrderRepositoryV0.java
@Repository // 안에 @Component가 있어 자동으로 컴포넌트 스캔 대상이 됨(스프링 빈 등록)
@RequiredArgsConstructor
public class OrderRepositoryV0 {
public void save(String itemId) {
// 저장 로직
if(itemId.equals("ex")) { // (다양한 예제를 위해)"ex"라는 것이 넘어오면 예외 발생시킬
throw new IllegalStateException("예외 발생!");
}
sleep(1000); // 상품을 저장하는데 1초 정도 걸린다고 가정
}
private void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Repository
:素子スキャンの対象となる.このため、自動的にスプリング空席として登録されます.sleep(1000)
:repositoryは、商品を保存するのに約1秒かかると仮定するために1秒遅延する.
また,異常発生状況を確認するためにitemIdの値が「ex」を超えるとIllegalStateException
の異常が発生する.
✔️ OrderServiceV0.java
@Service // @Service 안에 @Component가 있어 자동으로 컴포넌트 스캔의 대상이 됨(자동으로 스프링 빈 등록)
@RequiredArgsConstructor // 생성자 자동 생성
public class OrderServiceV0 {
private final OrderRepositoryV0 orderRepository;
public void orderItem(String itemId) {
orderRepository.save(itemId);
}
}
@Service
:素子スキャンの対象となる.したがって、スプリング空席としても自動的に登録されます.
実際の動作では、複雑なビジネスロジックはサービス層に含まれるが、例であるため、リポジトリに呼び出しストレージのコードのみが追加され、単純性が実現される.
✔️ OrderControllerV0.java
@RestController // @Controller + @ResponseBody
@RequiredArgsConstructor
public class OrderControllerV0 {
private final OrderServiceV0 orderService;
@GetMapping("/v0/request")
public String request(String itemId) {
orderService.orderItem(itemId);
return "ok";
}
}
@RestController
:構成部品のスキャンとスプリング(📌注意:RestControllerとされています.
異常が発生した場合
📌 @Controller vs @RestController
これらはSpringで指定したコントローラのコメントです.
従来のSpring MVCコントローラ@Controller
;
およびRestful Webサービスのコントローラ@RestController
両者の主な違いは,HTTP応答Bodyの生成方式である.
- @Controller (Spring MVC Controller)
[Controller - View]
従来のSpring MVCコントローラ@Controller
は、主にビューを返すために使用されている.
ソース:死刑囚開発者
この処理により、Spring MVCコンテンツはクライアントからViewに戻るように要求されます.
:バージョン0を使用して最も簡単な例を作成
商品注文プロセスと仮定すると、一般的なWebアプリケーションでは
Controller → Service → Repository
ストリームが最大限に簡略化される.✔️
OrderRepositoryV0.java
@Repository // 안에 @Component가 있어 자동으로 컴포넌트 스캔 대상이 됨(스프링 빈 등록)
@RequiredArgsConstructor
public class OrderRepositoryV0 {
public void save(String itemId) {
// 저장 로직
if(itemId.equals("ex")) { // (다양한 예제를 위해)"ex"라는 것이 넘어오면 예외 발생시킬
throw new IllegalStateException("예외 발생!");
}
sleep(1000); // 상품을 저장하는데 1초 정도 걸린다고 가정
}
private void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Repository
:素子スキャンの対象となる.このため、自動的にスプリング空席として登録されます.sleep(1000)
:repositoryは、商品を保存するのに約1秒かかると仮定するために1秒遅延する.また,異常発生状況を確認するためにitemIdの値が「ex」を超えると
IllegalStateException
の異常が発生する.✔️
OrderServiceV0.java
@Service // @Service 안에 @Component가 있어 자동으로 컴포넌트 스캔의 대상이 됨(자동으로 스프링 빈 등록)
@RequiredArgsConstructor // 생성자 자동 생성
public class OrderServiceV0 {
private final OrderRepositoryV0 orderRepository;
public void orderItem(String itemId) {
orderRepository.save(itemId);
}
}
@Service
:素子スキャンの対象となる.したがって、スプリング空席としても自動的に登録されます.実際の動作では、複雑なビジネスロジックはサービス層に含まれるが、例であるため、リポジトリに呼び出しストレージのコードのみが追加され、単純性が実現される.
✔️
OrderControllerV0.java
@RestController // @Controller + @ResponseBody
@RequiredArgsConstructor
public class OrderControllerV0 {
private final OrderServiceV0 orderService;
@GetMapping("/v0/request")
public String request(String itemId) {
orderService.orderItem(itemId);
return "ok";
}
}
@RestController
:構成部品のスキャンとスプリング(📌注意:RestControllerとされています.異常が発生した場合
📌 @Controller vs @RestController
これらはSpringで指定したコントローラのコメントです.
従来のSpring MVCコントローラ
@Controller
;およびRestful Webサービスのコントローラ
@RestController
両者の主な違いは,HTTP応答Bodyの生成方式である.- @Controller (Spring MVC Controller)
[Controller - View]
従来のSpring MVCコントローラ
@Controller
は、主にビューを返すために使用されている.ソース:死刑囚開発者
この処理により、Spring MVCコンテンツはクライアントからViewに戻るように要求されます.
[Controller - Data]
ただしSpring MVCのコントローラは、データを返す必要がある場合もあります.
Spring MVCのコントローラは、
@Controller
言語でデータを返す必要があります.これにより、コントローラはJson形式でデータを返すこともできます.
ソース:死刑囚開発者
@ResponseBody
を使用してクライアントデータ[コントローラ-ビュー]と差異をJson形式で返す.データを返すために、
@ResponseBody
は、ViewResolverの代わりにHttpMessageConverterによって動作する.HttpMessageConverterには複数のConverterが登録されており、必要に応じて返されるデータによって使用するConverterが異なります.
単純
@RestController
はStringHttpMessageConverter、문자열
はMappingJackson 2 HttpMessageConverterデータ型に応じて異なるメッセージConverter操作
SpringクライアントのHTTP受信ヘッダとサーバのコントローラ返却タイプ情報を組み合わせて,適切なHttpMessageConverterを選択して処理する.
- @RestController (Spring Restful Controller)
[RestController]
객체
は、Spring MVCコントローラに追加された@RestController
である.もちろん,RestControllerの主な用途はJson形式でオブジェクトデータを返すことである.
(記事の著者によると、VueJs+SpringBootプロジェクトでSpringBootがAPIサーバとして使用されている場合、Androidアプリケーションを開発してデータを返す場合に使用されている)
ソース:死刑囚開発者
1,2プロセスは同じ
リファレンス
Reference
この問題について(SpringBootコアの作成例(1)(+@Controllerと@RestControllerの違い)), 我々は、より多くの情報をここで見つけました https://velog.io/@dbsrud11/SpringBoot-핵심-원리-예제-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol