JavaRush /Java Blog /Random-KO /봄은 무섭지 않아요. REST 제어
Павел
레벨 11

봄은 무섭지 않아요. REST 제어

Random-KO 그룹에 게시되었습니다
기사 주기의 내용 다른 사람의 작업을 재사용하는 것은 모든 개발자에게 신성한 문제입니다. 😌 계속 진행하려면 컴퓨터 네트워크의 기본 사항을 이해해야 합니다. 여기에 일련의 기사가 있습니다 . HTTP 작동 방식, GET, POST, PUT 정의, 응답 상태, MVC 등 주요 사항에 주의하세요. JSON 및 직렬화에 대해 별도로 읽어보세요 . 제안된 예제를 서블릿으로 구현하는 것은 유용할 것입니다. 이는 온 마음을 다해 스프링 부트를 사랑하는 데 도움이 될 것입니다. 이 시리즈의 예제 스프링 부트 애플리케이션은 매우 간단하지만 MVC의 본질을 이해하는 데 도움이 될 것입니다. 아래에는 더 흥미로운 프로젝트에 대한 링크가 있습니다. REST와 Spring에서의 REST 사용에 대해 알아보려면 다음 세 가지 기사를 읽어보세요 . 첫 번째 기사에서는 REST가 무엇인지 읽을 것입니다. 두 번째 기사에서는 요청과 응답에 대해 설명합니다. 피델 동지의 의견을 꼭 읽고 메모해 두세요. 세 번째 기사에서는 Spring에서의 구현에 대한 실제적인 예를 제공할 것입니다. 애플리케이션을 생성하는 접근 방식은 크게 다르지 않으며(보고 비교하는 것이 유용합니다) 이를 구현합니다. HttpStatus, ResponseEntity <?>에 대해 이야기하는 부분에 주의를 기울이십시오. (<?>가 혼란스러우면 Herbert Shildt의 "Java. 초보자 가이드"에서 13장. 일반화를 읽으십시오.) POSTMAN에 대해 읽은 같은 기사에서( 추가로 이에 대한 짧은 비디오 ) POSTMAN을 설치하면 모든 기능이 필요하지 않습니다. 다양한 쿼리를 만드는 방법을 확인하세요. 예제에는 삼항 연산자가 있습니다 . 잊어버린 경우 기억을 새로 고치십시오. 예제 기사에서 @Autowired를 사용하여 빈 주입을 구현하는 방법에 주목하세요.
@RestController
public class ClientController {

   private final ClientService clientService;

   @Autowired
   public ClientController(ClientService clientService) {
       this.clientService = clientService;
   }
}
Spring 4.3부터 클래스에 생성자가 하나만 있는 경우 @Autowired 주석을 생략할 수 있다는 점을 알아야 합니다. 프레임워크 자체는 생성자에서 Bean을 구현해야 함을 파악합니다. 이 소스에서 자세한 내용을 읽을 수 있습니다 . 그리고 조심한다면 서비스 패키지의 구조에 대한 질문이 있어야 합니다 . 즉, ClientService 인터페이스ClientServiceImpl 인터페이스가 있는 이유는 무엇입니까 ? 이것은 올바른 관행입니다. 나중에 이것이 필요한 이유에 대해 이야기하고 우리는 그것을 사용할 것입니다. 그게 기사의 전부입니다. 읽기 전에 글을 써보자. "코드가 없는 날은 하루도 없습니다!" 시작점으로 간단한 GET 요청을 만들어 보겠습니다. 지난번에 야채 추측을 위한 애플리케이션을 작성했습니다. git clone https://FromJava@bitbucket.org/FromJava/speculation.git git clone git@bitbucket.org:FromJava/speculation.git 애플리케이션을 열고 ru 패키지에 있습니다. java.rush 컨트롤러 패키지를 생성합니다(MVC 패턴의 컨트롤러는 여기에 위치합니다). 클래스 공용 클래스 ProductController 만들기
@RestController
@RequestMapping("/speculation")
public class ProductController {

}
@RestController 주석은 Spring에 이것이 나머지 컨트롤러임을 나타냅니다. @RequestMapping - 모든 컨트롤러 메서드는 주석 괄호("/speculation")에 지정된 문자열로 시작하는 URI로 요청을 수신합니다. 우리는 클래스에 다음 메소드를 작성합니다
@GetMapping("/simple")
public String simple(){
    return "Легкий GET requestик";
}
프로젝트를 시작하고 브라우저 라인에 다음을 입력합니다: http://localhost:8080/speculation/simple 응답을 받습니다: Easy GET 요청 몇 가지 설명: 1. @RestController를 컨트롤러로 표시하는 클래스를 생성했습니다. @RequestMapping ("/ 추측") – 이 주석은 선택 사항입니다. 주석이 없으면 경로는 "/"로 시작됩니다. 2. 실행 시 문자열(Light GET 요청)을 반환하고 @GetMapping 주석(이 메서드는 GET 요청 전용임)으로 표시하고 메서드 경로("/simple")를 표시하는 메서드를 만들었습니다. 3. 포트 8080에서 프로젝트(서버)를 시작하고 다음 주소로 GET 요청을 했습니다: server/controller/method (http://localhost:8080/speculation/simple) 4. public String simple(){ return 이 요청에는 "Easy GET 요청자" 방법이 사용되었습니다. } 5. 메소드의 결과는 “Easy GET request”라는 문자열 형식으로 브라우저에 반환되었습니다. 이제 시작입니다! 가장 흥미로운 기사가 ​​여러분을 기다리고 있습니다. 위에 제안된 자료를 마스터하는 데는 하루 이상이 소요됩니다. 여기서 서두를 필요가 없습니다. 이 주제는 매우 중요하며 "코끼리를 부분적으로 먹는다"는 것을 이해해야 합니다. 훈련용(자료 마스터 후): 추측 응용 컨트롤러를 완성합니다 . 메소드 생성: 1) ID로 제품 검색 productService.findById() 메소드를 사용하십시오. 예제 출력
{
        "id": 1,
        "name": "Картофель",
        "purchasePrice": 20,
        "packaging": null,
        "salePrice": null
 }
나머지 컨트롤러 메서드를 구현한 후 "마지막 두 필드가 왜 null입니까? 거기에 일부 값이 있도록 하려면 어떻게 해야 합니까?"라고 생각해 보세요. 2) 매장의 모든 제품 보기: 모든 제품을 검색하려면 productService.findAll() 메소드를 사용하십시오. 패키징 및 마크업 필드를 채우려면 productService.pack()을 사용하세요. productService.makeMoney(); 출력에는 제품을 나열하는 JSON 배열이 포함되어야 합니다. 예:
[
    {
        "id": 1,
        "name": "Картофель",
        "purchasePrice": 20,
        "packaging": "Упаковано в лучшем виде",
        "salePrice": 100
    },
    {
        "id": 2,
        "name": "Морковь",
        "purchasePrice": 14,
        "packaging": "Упаковано в лучшем виде",
        "salePrice": 70
    }
]
3) 데이터베이스에 새 상품 추가(상품 추가: 양배추 및 도매 구매 가격) 사용: productService.save(); 메서드는 해당 HTTP 상태를 반환해야 합니다. 4) ID로 제품 삭제 이렇게 하려면 먼저 productRepository.deleteById() 가 포함된 메서드를 ProductService 에 구현합니다. 그런 다음 컨트롤러에서 사용하십시오. 컨트롤러 메서드는 적절한 Http 상태를 반환해야 합니다. 5) ID 별 상품 변경 (상품 도매가 및 상품명 변경) 이 작업은 이전 작업보다 더 복잡해집니다. 먼저 ID로 변경하려는 제품을 찾아야 합니다. productService.findById()를 사용하세요. 그런 다음 발견된 제품(객체)에서 해당 필드의 값을 Put 요청(json_object)의 본문에 수신된 객체의 필드 값으로 대체합니다. 이는 다음과 같이 수행할 수 있습니다.
найденный_товар = productService.findById(id);
найденный_товар.setName(an object_json.getName);
найденный_товар.setPurchasePrice(an object_json.getPurchasePrice);
이후에는 변경된 상품을 반드시 저장해야 합니다 . productService.save(found_product); 메서드는 해당 HTTP 상태를 반환해야 합니다. 이 방법에 문제가 있는 경우 Google에서 "put request java"를 검색할 수 있습니다. 아직 인터넷을 취소한 사람은 없습니다. 컨트롤러 작업은 여기서 끝나지 않습니다. 아직 많은 주제가 남아 있습니다...
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION