SpringBootコアの作成例(1)(+@Controllerと@RestControllerの違い)


🔗 スプリングコア原理-プレミアム編

[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に戻るように要求されます.
  • クライアントは、URI形式でWebサービスに要求を送信する.
  • マッピングされたHandlerおよびそのタイプを検索するDispatcherServeret要求の割り込み.
  • コントローラは要求を処理した後、応答をDispatcherServeretに返し、DispatcherServeretはビューをユーザーに返す.
  • ⁨⁨ビューに戻るには、ViewResolverを使用して、ViewResolverの設定に従ってビューを検索してレンダリングします.

    [Controller - Data]


    ただしSpring MVCのコントローラは、データを返す必要がある場合もあります.
    Spring MVCのコントローラは、@Controller言語でデータを返す必要があります.
    これにより、コントローラはJson形式でデータを返すこともできます.
    ソース:死刑囚開発者
  • クライアントは、URI形式でWebサービスに要求を送信する.
  • マッピングされたHandlerおよびそのタイプを検索するDispatcherServeret要求の割り込み.
  • @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アプリケーションを開発してデータを返す場合に使用されている)
    ソース:死刑囚開発者
  • クライアントは、URI形式でWebサービスに要求を送信する.
  • マッピングされたHandlerおよびそのタイプを検索するDispatcherServeret要求の割り込み.
  • RestControllerは要求を処理し、データ
  • を返す.
    1,2プロセスは同じ
    リファレンス