이전 기사는 Spring Boot와 JDBCTemplate, JPA 및 MyBatis와의 통합을 통해 데이터베이스에 대한 액세스를 달성합니다. 오늘 저는 주로 스프링 부팅을 통해 데이터를 프론트 엔드로 반환하는 방법을 주로 공유 할 것입니다.
현재 개발 프로세스에서 전면 및 후면의 분리를 최대화하기 위해 백엔드 인터페이스는 일반적으로 데이터 인터페이스 만 제공하며 프론트 엔드는 AJAX 요청을 통해 백엔드에서 데이터를 얻고 사용자에게 렌더링합니다. 우리가 사용하는 가장 일반적인 방법은 백엔드가 JSON 문자열을 프론트 엔드로 반환하고 프론트 엔드는 JSON 문자열을 구문 분석하여 JavaScript 객체를 생성 한 다음 처리한다는 것입니다. 이 기사는 Spring Boot 가이 모델을 어떻게 구현하는지 보여줍니다. 이 기사는 RESTFUL API를 설계하고 Spring Boot를 통해 관련 API를 구현하는 방법에 중점을 둘 것입니다. 그러나 모든 사람이 RESTFul 스타일 API를 더 잘 이해하기 위해서는 먼저 기존 데이터 리턴 인터페이스를 설계하여 모든 사람이 비교하여 이해할 수 있도록합니다.
기사 목록을 예로 들어 기사 목록을 반환하는 인터페이스를 구현하면 코드는 다음과 같습니다.
@controller @requestmapping ( "/article") 공개 클래스 ArticleController {@autowired private articleService articleService; @RequestMapping ( "/list.json") @ResponseBody Public List <article> larteArticles (문자열 제목, 정수 페이지, 정수 pagenum) {if (pagesize == null) {pagesize = 10; } if (pagenum == null) {pagenum = 1; } int offset = (pagenum -1) * pagesize; return articleService.getArticles (제목, 1L, 오프셋, pagesize); }}ArticleService의 구현은 매우 간단하여 ArticleMapper의 작동을 단순히 캡슐화합니다. 이전 기사를 참조 할 수 있습니다. ArticleService의 구현 클래스는 다음과 같습니다.
@ServicePublic Class articleServiceimpl은 articleService를 구현합니다. @override public long savearticle (@requestbody article article) {return articlemapper.insertarticle (article); } @override public list <article> getarticles (문자열 제목, long userId, int 오프셋, int pagesize) {article article = new article (); article.settitle (제목); article.setUserId (userId); return articlemapper.queryArticlesBypage (article, offset, pagesize); } @override public article getByid (long id) {return articlemapper.queryByid (id); } @override public void updatearticle (기사 기사) {article.setupdateTime (new date ()); articlemapper.updatearticleByid (기사); }}application.java 클래스를 실행 한 다음 http : // locahost : 8080/article/list.json을 방문하십시오. 다음 결과를 볼 수 있습니다.
ArticleServiceImpl은 스프링 IOC 컨테이너를 통해 쉽게 관리 할 수있는 콩으로 식별 된 스프링 주석 @Service 단 하나의 매우 일반적인 클래스입니다. ArticleController 클래스를 살펴 보겠습니다. 실제로, Spring MVC를 사용한 사람들은 이러한 주석에 익숙해야합니다. 간단한 설명은 다음과 같습니다.
@Controller 클래스를 컨트롤러로 식별합니다.
@requestmapping URL 매핑.
@ResponseBody는 JSON 문자열로 변환 된 결과를 반환합니다.
@requestbody는 JSON 형식 문자열 매개 변수를 수신하는 것을 의미합니다.
이 세 가지 주석을 통해 URL을 통해 JSON 형식 데이터를 프론트 엔드로 반환하는 기능을 쉽게 구현할 수 있습니다. 그러나 모두는 약간 혼란스러워해야합니다. 이런 것들은 Spring MVC입니까? Spring Boot와 어떤 관련이 있습니까? 실제로 Spring Boot의 기능은 구성 프로세스를 저장하는 것입니다. 다른 기능은 실제로 스프링과 스프링 MVC에 의해 제공됩니다. Spring Boot는 다양한 스타터를 통해 자동 구성 서비스를 제공한다는 것을 모두 기억해야합니다. 이 의존성은 이전의 프로젝트에 도입되었습니다.
<pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링 부트 스타터 -web </artifactid> </fectionency>
이것은 모든 Spring Boot 웹 프로젝트를 소개 해야하는 JAR 패키지입니다. 즉, Spring Boot 웹 프로젝트가 기본적으로 위의 기능을 지원하는 한. 여기서 우리는 Spring Boot를 통해 웹 엔지니어링을 개발하면 많은 구성 작업을 절약 할 수 있습니다.
좋아, Restful API를 구현하는 방법을 살펴 보겠습니다. 실제로 RESTFULL 자체는 심오한 기술이 아니라 프로그래밍 스타일 또는 디자인 스타일입니다. 기존의 HTTP 인터페이스 설계에서 우리는 일반적으로 Get and Post 메소드 만 사용한 다음 다른 작업을 나타내도록 스스로 정의하는 어휘를 사용합니다. 예를 들어, 위의 기사를 쿼리하기위한 인터페이스는 get 또는 post 메소드를 통해 액세스 할 수있는 쿼리 기사 목록을 나타 내기 위해 article/list.json을 정의합니다. RESTFUL API의 설계는 HTTP를 사용하여 CRUD 관련 작업을 나타냅니다. 따라서 Get 및 Post 방법 외에도 Put, Delete, Head 등과 같은 다른 HTTP 방법을 사용하여 다른 HTTP 방법을 통해 다른 의미를 가진 작업을 나타냅니다. 아래는 기사를 추가, 삭제, 수정 및 확인하기 위해 설계된 편안한 API 세트입니다.
| 인터페이스 URL | HTTP 방법 | 인터페이스 설명 |
| /기사 | 우편 | 기사를 저장하십시오 |
| /기사/{id} | 얻다 | 쿼리 기사 목록 |
| /기사/{id} | 삭제 | 기사를 삭제하십시오 |
| /기사/{id} | 놓다 | 기사 정보를 업데이트하십시오 |
여기서 URL은 리소스를 식별하는 방법 일 뿐이며 특정 동작은 HTTP 방법으로 지정됩니다.
이제 위의 인터페이스를 구현하는 방법을 살펴 보겠습니다. 나는 그것에 대해별로 말하지 않고 코드를보십시오.
@restController @requestMapping ( "/REST") public class articlerestController {@autowired private articleService articleService; @requestmapping (value = "/article", method = post, produces = "application/json") public webresponse <map <string, object >> savearticle (@requestbody article article) {article.setuserid (1l); articleService.savearticle (기사); Map <string, object> ret = new Hashmap <> (); ret.put ( "id", article.getId ()); webresponse <map <string, object >> response = webresponse.getSuccessResponse (ret); 반환 응답; } @requestmapping (value = "/article/{id}", method = delete, produces = "application/json") public webresponse <?> deletearticle (@pathvariable long id) {article article = articleService.getByid (id); article.setstatus (-1); articleService.updatearticle (기사); Webresponse <boodge> 응답 = Webresponse.getSuccessResponse (null); 반환 응답; } @requestmapping (value = "/article/{id}", method = put, produces = "application/json") public webresponse <botort> updatearticle (@pathvariable long id, @requestbody article) {article.setid (id); articleService.updatearticle (기사); Webresponse <boodge> 응답 = Webresponse.getSuccessResponse (null); 반환 응답; } @RequestMapping (value = "/article/{id}", method = get, produces = "application/json") public webresponse <article> getarticle (@pathvariable long id) {article article = articleService.getByid (id); Webresponse <article> 응답 = Webresponse.getSuccessResponse (기사); 반환 응답; }}이 코드를 다시 분석합시다. 이 코드와 이전 코드의 차이점은 다음과 같습니다.
(1) @Controller가 아닌 @RestController 주석을 사용하고 있습니다. 그러나이 주석은 Spring Boot에서도 제공되지 않고 Spring MVC4에 제공된 주석이 제공되므로 RESTFUL을 지원하는 컨트롤러를 나타냅니다.
(2)이 클래스에는 동일한 3 개의 URL 맵이 있습니다. 여기서는 방법별로 구별 할 수 있습니다. 생산 기능은 반환 결과의 유형이 JSON임을 나타냅니다.
(3) 주석 @PathVariable은 Spring MVC에서도 제공됩니다. 이 기능은 변수의 값이 액세스 경로에서 얻어 졌음을 나타냅니다.
결국,이 코드는 여전히 Spring Boot와 거의 관련이 없습니다. Spring Boot는 자동 구성 기능 만 제공합니다. 또한 Spring Boot가 매우 편안한 이유는 매우 침습적이며 기본적으로 존재한다고 느끼지 않기 때문에 중요한 이유이기도합니다.
코드가 완료된 후 테스트하는 방법은 무엇입니까? Get 메소드를 제외하고는 브라우저를 통해 직접 액세스 할 수 없습니다. 물론 우체국을 통해 다양한 HTTP 요청을 직접 보낼 수 있습니다. 그러나 여전히 단위 테스트 클래스를 통해 다양한 방법 테스트를 지원합니다. 여기서 우리는 Junit을 통해 각 방법을 테스트합니다.
@RunWith (SpringJunit4classRunner.class) @springboottest (classe = application.class) 공개 클래스 ArticleControllerTest {@autowired private articlerestController restController; 개인 mockmvc MVC; @public void setup ()이 예외 {mvc = mockmvcbuilders.standalonesetup (restcontroller) .build (); } @test public void testAdDarticle ()은 예외를 겪고 {article article = new article (); article.settitle ( "Test article0000000"); article.settype (1); article.setstatus (2); article.setsummary ( "이것은 테스트 기사"); GSON GOSN = NEW GSON (); requestBuilder builder = mockmvcrequestBuilders .post ( "/rest/article") .Accept (mediaType.Application_json) .ContentType (mediaType.Application_json_utf8) .content (gosn.tojson (article)); mvcresult result = mvc.perform (builder) .andreturn (); System.out.println (result.getResponse (). getContentAsstring ()); } @test public void testupdatearticle () throws 예외 {article article = new article (); article.settitle ( "업데이트 테스트 기사"); article.settype (1); article.setstatus (2); article.setsummary ( "이것은 업데이트 테스트 기사"); GSON GOSN = NEW GSON (); requestBuilder builder = mockmvcrequestBuilders .put ( "/rest/article/1") .Accept (mediaType.application_json) .ContentType (mediaType.Application_json_utf8) .Content (gosn.tojson (article)); mvcresult result = mvc.perform (builder) .andreturn (); } @test public void testQueryArticle ()는 예외를 rass니다 {requestBuilder builder = mockmvcrequestBuilders .get ( "/rest/article/1") .accept (mediaType.Application_json) .ContentType (mediaType.Application_JSON_UTF8); mvcresult result = mvc.perform (builder) .andreturn (); System.out.println (result.getResponse (). getContentAsstring ()); } @test public void testdeletearticle ()는 예외를 던지고 {requestBuilder builder = mockmvcrequestBuilders .delete ( "/rest/article/1") .accept (mediaType.Application_json) .ContentType (mediaType.Application_JSON_UTF8); mvcresult result = mvc.perform (builder) .andreturn (); }}실행 결과를 여기에 게시하지 않겠습니다. 관심이 있으시면 직접 실험 할 수 있습니다. 전체 수업에서 설명 할 포인트는 거의 없습니다. 이러한 것들의 주된 이유는 그들이 Spring Boot와 아무 관련이 없기 때문입니다. 이러한 작업을 지원하는 이유는 이전 기사에서 언급 한 해당 스타터를 소개하기 때문입니다.
<pectionency> <groupid> org.springframework.boot </groupid> <artifactid> 스프링 부트 스타터-테스트 </artifactid> <cope> test </scope> </fectionency>
HTTP 요청을 실행해야하므로 여기에서 MockMVC가 사용됩니다. ArticlerestController는 주입을 통해 인스턴스화되며 직접적으로 새로운 것은 아닙니다. 그렇지 않으면 Spring IOC 컨테이너를 통해 ArticLerestController를 관리 할 수 없으므로 다른 클래스는 정상적으로 주입 할 수 없습니다. Mockmvc를 통해 HTTP Delete/Put/Post 및 기타 방법을 쉽게 구현할 수 있습니다.
이 기사에서는 Spring Boot가 RESTFul API를 구현하는 데 사용되는 경우 대부분의 물건은 Spring 및 Spring MVC에서 제공되며 Spring Boot는 자동 구성 기능 만 제공한다고 설명합니다. 그러나이 자동 구성은 우리를 위해 많은 개발 및 유지 보수 작업을 줄여서 웹 프로젝트를보다 간단하고 효율적으로 구현할 수 있도록하여 프레임 워크에 대한 관심을 가지지 않고 비즈니스 자체의 개발에 더 집중할 수 있도록합니다. 이 기사에서는 Postman과 Junit을 통해 Restful 인터페이스에 액세스 할 수 있다고 언급했습니다. 다음 기사에서는 액세스 할 수있는 다른 방법을 소개합니다. 관심이 있으시면 계속주의를 기울일 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.