O artigo anterior explica a integração do Spring Boot com JDBCTemplate, JPA e Mybatis para obter acesso ao banco de dados. Hoje vou compartilhar principalmente com você como retornar dados para o front-end através da Spring Boot.
No processo de desenvolvimento atual, para maximizar a separação das extremidades dianteiras e traseiras, a interface de back -end geralmente fornece apenas interfaces de dados, e o front -end obtém dados do back -end através de solicitações do AJAX e o renderiza ao usuário. A maneira mais comum que usamos é que o back -end retornará uma sequência JSON para o front -end, e o front -end analisa a string json para gerar um objeto JavaScript e, em seguida, processá -lo. Este artigo demonstrará como a Spring Boot implementa esse modelo. Este artigo se concentrará em como projetar uma API RESTful e implementar APIs relacionadas através da Spring Boot. No entanto, para que todos entendam melhor a API de estilo repouso, primeiro projetaremos uma interface de retorno de dados tradicional para que todos possam entendê-la em comparação.
Vamos pegar a lista de artigos como um exemplo para implementar uma interface que retorne a lista de artigos, o código é o seguinte:
@Controlador @requestmapping ("/artigo") classe pública articleController {@aUTowired Private ARTICLESVICE ARTICLEVERIDE; @RequestMapping ("/list.json") @ResponseBody Public List <Trission> listarticles (título da string, Pagesize inteiro, Pagenum integer) {if (paGagesize == null) {Pagesize = 10; } if (pagenum == null) {pagenum = 1; } int offset = (Pagenum - 1) * PageSize; retornar articleservice.getarticles (título, 1L, deslocamento, PageSize); }}A implementação do Articleservice é muito simples, o que simplesmente encapsula a operação do ArticleMapper. Você pode consultar o artigo anterior. A classe de implementação do ArticlesService é a seguinte:
@ServicePublic Class ArticleserviceImpl implementa o Articleservice {@AUTOWIRED ARTICLEMAPPER DE ARTICLEMAPPER; @Override Public Long SaveArticle (artigo do @RequestBody Article) {return articleMapper.inserTarticle (artigo); } @Override Public List <Recution> getArticles (título da string, UserID longo, Int Offset, Int Pagesize) {Artigo = novo artigo (); artigo.setTitle (título); artigo.setUserID (UserID); return articlemapper.queryarticlesbypage (artigo, deslocamento, PageSize); } @Override Public Artigo getById (longo id) {return articleMapper.QueryById (id); } @Override public void updatearticle (artigo do artigo) {Artigo.SetUpDateTime (new Date ()); articleMapper.UpDatearticleById (artigo); }}Execute a classe Application.java e visite: http: // lochost: 8080/article/list.json, você pode ver os seguintes resultados:
O ArticleserviceImpl é uma classe muito comum, com apenas uma anotação da primavera @service, identificada como um feijão para facilitar o gerenciamento através de contêineres da Spring IOC. Vamos dar uma olhada na classe ArticleController. De fato, aqueles que usaram o MVC da primavera devem estar familiarizados com essas anotações. Aqui está uma breve explicação:
@Controller identifica uma classe como um controlador.
@RequestMapping URL Mapping.
@ResponseBody Retorna o resultado convertido em uma string json.
@Requestbody significa receber parâmetros de string de formato json.
Através dessas três anotações, podemos implementar facilmente a função de retornar dados de formato JSON para o front-end através dos URLs. Mas todos devem estar um pouco confusos. São essas coisas do MVC da primavera? O que isso tem a ver com a inicialização da primavera? De fato, a função da bota de primavera é salvar -nos o processo de configuração. Outras funções são realmente fornecidas pelo MVC da primavera e da primavera para nós. Todos devem se lembrar de que a Spring Boot nos fornece serviços de configuração automática por meio de vários iniciantes. Essa dependência foi introduzida em nosso projeto antes:
<Depencency> <PuerpId> org.springframework.boot </frugiD> <TRATIFACTID> Spring-boot-starter-web </artifactId> </dependency>
Este é um pacote JAR que todos os projetos da Web Spring Boot precisam ser introduzidos. Ou seja, desde que os projetos da Spring Boot Web suportem as funções acima por padrão. Aqui, descobrimos ainda que o desenvolvimento de engenharia da Web através da Spring Boot nos salva muito trabalho de configuração.
Ok, vamos dar uma olhada em como implementar a API RESTful. De fato, o RESTful em si não é uma tecnologia profunda, mas apenas um estilo de programação ou um estilo de design. No design da interface HTTP tradicional, geralmente usamos apenas os métodos GET e POST e, em seguida, usamos o vocabulário, nos definimos para representar diferentes operações. Por exemplo, a interface para consultar artigos acima, definimos o artigo/list.json para representar listas de artigos de consulta, que podem ser acessados por métodos GET ou POST. O design da API RESTful usa o HTTP para representar operações relacionadas ao CRUD. Portanto, além de obter e postar métodos, outros métodos HTTP também são usados, como put, excluir, cabeça etc., para representar operações com significados diferentes através de diferentes métodos HTTP. Abaixo está um conjunto de APIs RESTful projetadas por mim para adicionar, excluir, modificar e verificar artigos:
| URL da interface | Métodos HTTP | Descrição da interface |
| /artigo | PUBLICAR | Salve o artigo |
| /Artigo/{id} | PEGAR | Lista de artigos de consulta |
| /Artigo/{id} | EXCLUIR | Excluir artigos |
| /Artigo/{id} | COLOCAR | Atualizar informações do artigo |
Pode -se ver aqui que o URL é apenas uma maneira de identificar recursos e o comportamento específico é especificado pelo método HTTP.
Agora, vamos dar uma olhada em como implementar a interface acima. Não vou dizer muito sobre isso, basta olhar para o código:
@RestController @requestmapping ("/REST") Classe pública ArticleRestController {@AUTOWIRED PRIVADOR ATICLESVICE ARTICLESVEDERVICE; @RequestMapping (Value = "/Artigo", Method = Post, Produces = "Application/JSON") public webSponse <map <string, object >> Savesearticle (artigo do artigo do @Requestbody) {artigo.SetUserID (1L); Articleservice.Savearticle (artigo); Mapa <string, object> ret = new hashmap <> (); ret.put ("id", artigo.getId ()); WebSponse <map <string, object >> resposta = webSponse.getSuccessResponse (RET); resposta de retorno; } @RequestMapping (value = "/Article/{id}", Method = delete, Produces = "Application/JSON") public webroSponse <?> Deletearticle (@PathVariable Long Id) {Artigo = Articleservice.getById (id); artigo.SetStatus (-1); Articleservice.UpDatearticle (Artigo); WebSponse <ject> Response = webSponse.getSuccessResponse (NULL); resposta de retorno; } @RequestMapping (value = "/Article/{id}", Method = put, Produces = "Application/JSON") public WeBRESPONSE <BECTTEL> UPDATATICELE (@PathVariable Long Id, artigo @RequestBody Article) {Article.SetId (id); Articleservice.UpDatearticle (Artigo); WebSponse <ject> Response = webSponse.getSuccessResponse (NULL); resposta de retorno; } @RequestMapping (Value = "/Article/{id}", Method = get, Produces = "Application/JSON") public webSponse <Artigo> getArticle (@PathVariable Long Id) {Artigo do artigo = Articleservice.getById (id); WebResponse <Artigo> Response = webSponse.getSuccessResponse (Artigo); resposta de retorno; }}Vamos analisar este código novamente. A diferença entre este código e o código anterior é:
(1) Estamos usando a anotação @RestController, não @Controller. No entanto, essa anotação também não é fornecida pela Spring Boot, mas uma anotação fornecida no Spring MVC4, indicando um controlador que suporta RESTful.
(2) Existem três mapas de URL nesta classe que são iguais, ou seja, eles são todos /Artigo /{id}, que não pode aparecer na classe identificada pelo @Controller. Aqui, podemos distingui -lo por método. A função dos produtos é indicar que o tipo de resultado de retorno é JSON.
(3) A anotação @PathVariable também é fornecida pelo Spring MVC. Sua função é indicar que o valor da variável é obtido a partir do caminho de acesso.
Afinal, esse código ainda tem pouco a ver com a inicialização da primavera. A Spring Boot fornece apenas funções automáticas de configuração, o que também é uma razão importante pela qual a Spring Boot é muito confortável de usar, porque é muito invasiva e você basicamente não sente sua existência.
Depois que o código terminar, como testá -lo? Exceto pelo método GET, não podemos acessá -lo diretamente através do navegador. Obviamente, podemos enviar diretamente várias solicitações HTTP através do Postman. No entanto, ainda suporto testar vários métodos por meio de classes de teste de unidade. Aqui vamos testar cada método através do Junit:
@Runwith (springjunit4classrunner.class) @springboottest (classes = Application.class) public class ArticleControllerTest {@AUTOWIRED PRIVADO ARTICLERESTCONTROLLER RestController; mockmvc mockmvc privado; @Before public void setUp () lança exceção {mvc = zockmvcbuilders.standaloneSetup (RestController) .build (); } @Test public void testAdDarticle () lança exceção {artigo do artigo = novo artigo (); artigo.setTitle ("Test Artigo0000000"); artigo.SetType (1); artigo.SetStatus (2); artigo.SetSummary ("Este é um artigo de teste"); GSON GOSN = new GSON (); RequestBuilder Builder = MOGKMVCREQUESTBUILDERS .POST ("/REST/ARTIGO") .ACCETO (MediaType.Application_Json) .ContentType (MediaType.Application_Json_Utf8) .Content (Gosn.tojson (Artigo)); Resultado mvcresult = mvc.perform (construtor) .andreturn (); System.out.println (resultado.getResponse (). GetContentasstring ()); } @Test public void testUpDatearticle () lança exceção {artigo do artigo = novo artigo (); artigo.setTitle ("Atualizar artigo de teste"); artigo.SetType (1); artigo.SetStatus (2); artigo.SetSummary ("Este é um artigo de teste de atualização"); GSON GOSN = new GSON (); RequestBuilder Builder = MOGKMVCREQUESTBUILDERS .put ("/Rest/Artigo/1") .Acept (MediaType.Application_Json) .ContentType (MediaType.Application_Json_Utf8) .Content (Gosn.tojson (Artigo)); Resultado mvcresult = mvc.perform (construtor) .andreturn (); } @Test public void testQueryarticle () lança exceção {requestbuilder construtora = zockmvcRequestBuilders .get ("/REST/ARTEM/1") .CEcept (MediaType.Application_Json) .ContentType (MediaType.Application_Json_utf8); Resultado mvcresult = mvc.perform (construtor) .andreturn (); System.out.println (resultado.getResponse (). GetContentasstring ()); } @Test public void testDeleTicle () lança exceção {requestbuilder construtor = zockmvcRequestBuilders .Delete ("/Rest/Artigo/1") .Acept (MediaType.Application_Json) .ContentType (MediaType.Aplication_Json_utf8); Resultado mvcresult = mvc.perform (construtor) .andreturn (); }}Não vou postar os resultados da execução aqui. Se você estiver interessado, pode experimentar você mesmo. Ainda existem muito poucos pontos a serem explicados em toda a classe. A principal razão para essas coisas é que elas não têm nada a ver com a bota da primavera. O motivo para apoiar essas operações é introduzir o iniciador correspondente mencionado no artigo anterior:
<Ependency> <GrupidId> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-Starter-test </sutifactId> <cope> Test </schope> </dependency>
Como as solicitações HTTP devem ser executadas, o MockMVC é usado aqui. O ArticleRestController é instanciado por injeção e não pode ser diretamente novo. Caso contrário, o ArticleRestController não pode ser gerenciado através de contêineres do IOC da primavera; portanto, outras classes depende de não poderá ser injetado normalmente. Através do MockMVC, podemos facilmente implementar o HTTP Excluir/put/post e outros métodos.
Este artigo explica que, se a inicialização da primavera for usada para implementar a API RESTful, a maioria das coisas é fornecida pelo MVC da primavera e da primavera, e a Spring Boot fornece apenas funções de configuração automática. No entanto, é essa configuração automática que reduz muito trabalho de desenvolvimento e manutenção para nós, permitindo -nos implementar um projeto da Web com mais de maneira simples e eficiente, para que possamos nos concentrar mais no desenvolvimento do próprio negócio sem nos preocupar com a estrutura. Neste artigo, mencionamos que podemos acessar a interface RESTful através do Postman e Junit. No próximo artigo, apresentaremos outra maneira de acessá -lo. Se você estiver interessado, pode continuar prestando atenção.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.