El artículo anterior explica la integración de Spring Boot con JDBCTemplate, JPA y MyBatis para lograr el acceso a la base de datos. Hoy compartiré principalmente con usted cómo devolver los datos al front-end a través del arranque de primavera.
En el proceso de desarrollo actual, para maximizar la separación de los extremos frontales y traseros, la interfaz de backend generalmente solo proporciona interfaces de datos, y el frontend obtiene datos del backend a través de las solicitudes de AJAX y lo convierte en el usuario. La forma más común que usamos es que el backend devolverá una cadena JSON al frontend, y el frontend analiza la cadena JSON para generar un objeto JavaScript, y luego procesarlo. Este artículo demostrará cómo el arranque de primavera implementa este modelo. Este artículo se centrará en cómo diseñar una API RESTful e implementar API relacionadas a través del arranque de primavera. Sin embargo, para que todos comprendan mejor la API de estilo RESTFUL, primero diseñaremos una interfaz de retorno de datos tradicional para que todos puedan entenderla en comparación.
Tomemos la lista de artículos como un ejemplo para implementar una interfaz que devuelva la lista de artículos, el código es el siguiente:
@Controlador @requestmapping ("/artículo") clase pública articlecontroller {@aUtowired private ArticleService ArticlesService; @RequestMapping ("/list.json") @ResponseBody Public List <Attic> ListAtticles (Título de cadena, Integer PageSize, Integer Pagenum) {if (PageSize == NULL) {PageSize = 10; } if (pagenum == null) {pagenum = 1; } int offset = (Pagenum - 1) * PageSize; devolver ArticlesService.getArticles (título, 1L, desplazamiento, páginas); }}La implementación de ArticleService es muy simple, lo que simplemente encapsula la operación de Articlemapper. Puede consultar el artículo anterior. La clase de implementación de ArticlesService es la siguiente:
@ServicePublic Public ArticlesServiceImpl implementa ArticlesService {@aUtowired Private Articlemapper ArticLemapper; @Override public Long Saveartle (@RequestBody Artículo Artículo) {return articLemapper.insertArtice (artículo); } @Override Public List <At artículo> getArticles (Título de cadena, Long UserId, int Offset, int PageSize) {Artículo Artículo = nuevo artículo (); Artículo. Settitle (título); Artículo.setUserID (UserId); return articlemapper.QueryarticlesBypage (artículo, compensación, páginas); } @Override Public Artículo GetByid (ID Long) {return articLemapper.QueryById (id); } @Override public void UpdateArtle (artículo Artículo) {Artículo.setUpDateTime (nueva fecha ()); articlemapper.updatearticleByid (artículo); }}Ejecute la clase Application.java y luego visite: http: // Locahost: 8080/artículo/list.json, puede ver los siguientes resultados:
ArticleServiceImpl es una clase muy ordinaria, con solo una anotación de primavera @service, identificada como un frijol para una fácil gestión a través de contenedores de CIO de primavera. Echemos un vistazo a la clase ArticLecontroller. De hecho, aquellos que han usado MVC de primavera deben estar familiarizados con estas anotaciones. Aquí hay una breve explicación:
@Controller identifica una clase como controlador.
@RequestMapping URL Mapeo.
@ResponseBody Devuelve el resultado convertido a una cadena JSON.
@RequestBody significa recibir parámetros de cadena de formato JSON.
A través de estas tres anotaciones, podemos implementar fácilmente la función de devolver los datos de formato JSON al front-end a través de URL. Pero todos deben estar un poco confundidos. ¿Son estas cosas de Spring MVC? ¿Qué tiene que ver con Spring Boot? De hecho, la función de Spring Boot es guardar el proceso de configuración. Otras funciones son proporcionadas por Spring y Spring MVC para nosotros. Todos deben recordar que Spring Boot nos proporciona servicios de configuración automática a través de varios entrantes. Esta dependencia se introdujo en nuestro proyecto antes:
<Spendency> <MoupRoMID> org.springframework.boot </groupid> <artifactId> spring-boot-starter-web </artifactid> </pendency>
Este es un paquete JAR que todos los proyectos web de arranque de primavera deben introducirse. Es decir, siempre que los proyectos web de arranque de primavera admitan las funciones anteriores de forma predeterminada. Aquí encontramos además que el desarrollo de la ingeniería web a través del arranque de primavera nos guarda mucho trabajo de configuración.
Ok, echemos un vistazo a cómo implementar la API RESTful. De hecho, Restful en sí no es una tecnología profunda, sino solo un estilo de programación o un estilo de diseño. En el diseño tradicional de la interfaz HTTP, generalmente solo usamos los métodos Get and Post, y luego usamos el vocabulario nos definimos para representar diferentes operaciones. Por ejemplo, la interfaz para consultar los artículos anteriores, definimos Artículo/List.json para representar las listas de artículos de consulta, a las que se puede acceder a través de métodos GET o POST. El diseño de la API RESTful utiliza HTTP para representar operaciones relacionadas con Crud. Por lo tanto, además de obtener y publicar métodos, también se utilizan otros métodos HTTP, como PUT, Delete, Head, etc., para representar operaciones con diferentes significados a través de diferentes métodos HTTP. A continuación se muestra un conjunto de API RESTful diseñadas por mí para agregar, eliminar, modificar y verificar artículos:
| URL de interfaz | Métodos HTTP | Descripción de la interfaz |
| /artículo | CORREO | Guardar el artículo |
| /artículo/{id} | CONSEGUIR | Lista de artículos de consulta |
| /artículo/{id} | BORRAR | Eliminar artículos |
| /artículo/{id} | PONER | Actualizar información del artículo |
Se puede ver aquí que la URL es solo una forma de identificar recursos, y el comportamiento específico es especificado por el método HTTP.
Ahora echemos un vistazo a cómo implementar la interfaz anterior. No diré mucho al respecto, solo mira el código:
@RestController @requestMapping ("/REST") Public Class ArtiClerestController {@aUtoWired Private ArticleService ArticlesService; @RequestMapping (valor = "/artículo", método = post, produce = "aplicación/json") public webResponse <map <string <string, object >> saveartle (@RequestBody Artículo Artículo) {Artículo.setUserID (1l); ArticleService.Saveartle (artículo); Map <string, object> ret = new HashMap <> (); ret.put ("id", artículo.getId ()); WebResponse <map <string, object >> respuesta = webResponse.getSuccessResponse (ret); Respuesta de retorno; } @RequestMapping (valor = "/artículo/{id}", método = delete, produce = "Application/JSON") public WebResponse <?> Deleteartle (@PathVariable Long Id) {artículo Artículo = ArticleService.getById (id); Artículo.setStatus (-1); ArticleService.updateartle (artículo); WebResponse <S Object> Response = WebResponse.GetSuccessResponse (NULL); Respuesta de retorno; } @RequestMapping (valor = "/artículo/{id}", método = put, produce = "aplicación/json") public WebResponse <S Object> UpdateArtle (@PathVariable Long ID, @RequestBody Artículo Artículo) {Artículo.setId (id); ArticleService.updateartle (artículo); WebResponse <S Object> Response = WebResponse.GetSuccessResponse (NULL); Respuesta de retorno; } @RequestMapping (valor = "/artículo/{id}", método = get, produce = "aplicación/json") public webResponse <artículo> getAtticle (@PathVariable Long ID) {Artículo Artículo = ArticleService.getById (id); WebResponse <ic artículo> respuesta = webResponse.getSuccessResponse (artículo); Respuesta de retorno; }}Analicemos este código nuevamente. La diferencia entre este código y el código anterior es:
(1) Estamos usando la anotación @RestController, no @Controller. Sin embargo, esta anotación tampoco es proporcionada por Spring Boot, sino una anotación proporcionada en Spring MVC4, que indica un controlador que admite RESTFUL.
(2) Hay tres mapas de URL en esta clase que son los mismos, es decir, son todos /Artículo /{id}, que no se permite aparecer en la clase identificada por @Controller. Aquí, podemos distinguirlo por método. La función de Produce es indicar que el tipo de resultado de retorno es JSON.
(3) La anotación @PathVariable también es proporcionada por Spring MVC. Su función es indicar que el valor de la variable se obtiene de la ruta de acceso.
Entonces, después de todo, este código todavía tiene poco que ver con Spring Boot. Spring Boot solo proporciona funciones de configuración automática, lo cual también es una razón importante por la cual el arranque de primavera es muy cómodo de usar, porque es muy invasivo y básicamente no sientes su existencia.
Después de que termine el código, ¿cómo probarlo? Excepto por el método GET, no podemos acceder a él directamente a través del navegador. Por supuesto, podemos enviar directamente varias solicitudes HTTP a través de Postman. Sin embargo, todavía admito probar varios métodos a través de clases de prueba unitaria. Aquí probaremos cada método a través de Junit:
@RunWith (SpringJUnit4ClassRunner.class) @SpringBoottest (classes = Application.Class) public class ArticLecOntrollerTest {@AUTOWIREDIRIRD ARTICLERECTONTROLLER RESTCONTROLLER; MVC MOCKMVC PRIVADO; @Bebore public void setup () lanza la excepción {mvc = mockmvcbuilders.standalonesetup (RestController) .Build (); } @Test public void testAdDarticle () lanza la excepción {Artículo Artículo = nuevo artículo (); artículo. Artículo.settype (1); Artículo.setStatus (2); Artículo.setsummary ("Este es un artículo de prueba"); Gson gosn = new Gson (); RequestBuilder Builder = mockmvCrequestBuilders .post ("/REST/Artículo") .accept (Mediatype.application_json) .ContentType (Mediatype.application_json_utf8) .content (gosn.tojson (artículo)); MVCRESULT result = Mvc.perform (Builder) .andreturn (); System.out.println (result.getResponse (). GetContentAstring ()); } @Test public void topDateArticle () lanza la excepción {Artículo Artículo = nuevo artículo (); Artículo.settitle ("Artículo de prueba de actualización"); Artículo.settype (1); Artículo.setStatus (2); Artículo.setsummary ("Este es un artículo de prueba de actualización"); Gson gosn = new Gson (); RequestBuilder Builder = MockMvCrequestBuilders .put ("/REST/Artículo/1") .accept (Mediatype.application_json) .ContentType (Mediatype.application_json_utf8) .content (gosn.tojson (artículo)); MVCRESULT result = Mvc.perform (Builder) .andreturn (); } @Test public void testQueryarticle () lanza la excepción {requestBuilder Builder = MockMvCrequestBuilders .get ("/REST/Artículo/1") .accept (Mediatype.Application_JSON) .ContentType (Mediatype.Applation_JSON_UTF8); MVCRESULT result = Mvc.perform (Builder) .andreturn (); System.out.println (result.getResponse (). GetContentAstring ()); } @Test public void testDelElTearticle () lanza la excepción {requestBuilder builder = mockmvCrequestBuilders .delete ("/REST/Artículo/1") .accept (Mediatype.Application_JSON) .ContentType (Mediatype.applation_json_utf8); MVCRESULT result = Mvc.perform (Builder) .andreturn (); }}No publicaré los resultados de ejecución aquí. Si está interesado, puede experimentar con él usted mismo. Todavía hay muy pocos puntos para explicar en toda la clase. La razón principal de estas cosas es que no tienen nada que ver con Spring Boot. La razón para apoyar estas operaciones es introducir el arrancador correspondiente mencionado en el artículo anterior:
<Spendency> <ProupId> org.springframework.boot </groupid> <artifactId> spring-boot-starter-test </arfactid> <cope> test </cope> </dependence>
Debido a que las solicitudes HTTP se deben ejecutar, aquí se usa MOCKMVC. ArticlerestController se instancia a través de la inyección y no puede ser directamente nuevo. De lo contrario, ArticlerestController no se puede administrar a través de contenedores de COI de primavera, por lo que otras clases de las que depende no se pueden inyectar normalmente. A través de MOCKMVC, podemos implementar fácilmente HTTP Delete/Put/Post y otros métodos.
Este artículo explica que si Spring Boot se usa para implementar una API RESTful, la mayoría de las cosas son proporcionadas por Spring y Spring MVC, y Spring Boot solo proporciona funciones de configuración automática. Sin embargo, es esta configuración automática la que reduce mucho trabajo de desarrollo y mantenimiento para nosotros, lo que nos permite implementar un proyecto web de manera más simple y eficiente, para que podamos centrarnos más en el desarrollo del negocio en sí sin preocuparnos por el marco. En este artículo, mencionamos que podemos acceder a la interfaz RESTful a través de Postman y Junit. En el próximo artículo, presentaremos otra forma de acceder a él. Si está interesado, puede continuar prestando atención.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.