java - restful - spring rest jackson
crear servicios de descanso de primavera sin usar el arranque de primavera (2)
Aquí hay otro ejemplo:
Diseño de directorio:
.
├── ./pom.xml
└── ./src
└── ./src/main
├── ./src/main/java
│ └── ./src/main/java/biz
│ └── ./src/main/java/biz/tugay
│ └── ./src/main/java/biz/tugay/restfulspring
│ └── ./src/main/java/biz/tugay/restfulspring/config
│ ├── ./src/main/java/biz/tugay/restfulspring/config/RestfulHello.java
│ └── ./src/main/java/biz/tugay/restfulspring/config/WebAppInitalizer.java
└── ./src/main/webapp
└── ./src/main/webapp/WEB-INF
└── ./src/main/webapp/WEB-INF/web.xml
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>biz.tugay</groupId>
<artifactId>restfulSpring</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>restfulSpring Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>restfulSpring</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.1.v20140609</version>
</plugin>
</plugins>
</build>
</project>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>
WebAppInitalizer.java
package biz.tugay.restfulspring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
@Configuration
@EnableWebMvc
@ComponentScan("biz.tugay.restfulspring")
public class WebAppInitalizer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected String[] getServletMappings() {
return new String[]{"/*"};
}
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{WebAppInitalizer.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[0];
}
}
RestfulHello.java
package biz.tugay.restfulspring.config;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/")
public class RestfulHello {
@RequestMapping(value = "hello")
public ResponseEntity<String> sayHello() {
final HttpHeaders httpHeaders= new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<String>("{/"msg/": /"Hello World/"}", httpHeaders, HttpStatus.OK);
}
}
Construye y ejecuta:
mvn clean install
mvn jetty:start
Prueba:
> GET /hello HTTP/1.1
> Host: localhost:8080
> User-Agent: insomnia/5.15.0
> Accept: */*
< HTTP/1.1 200 OK
< Date: Fri, 27 Apr 2018 00:06:07 GMT
< Content-Type: application/json
< Content-Length: 22
< Server: Jetty(9.2.1.v20140609)
Contenido recibido:
{
"msg": "Hello World"
}
He seguido el tutorial de inicio en spring.io para crear servicios REEST https://spring.io/guides/gs/rest-service/ . El problema es que este tutorial solo explica cómo producir un jar de ejecución independiente con Tomcat incrustado usando Spring Boot.
¿Hay alguna manera de crear un proyecto desde cero para producir una guerra para implementar, por ejemplo, en una instancia de Tomcat ya existente?
PD: Encontré un subproceso Spring RESTful Service anterior como WAR en lugar de JAR en Tomcat en stackoverflow relacionado con el mismo problema. El problema es que las respuestas y sugerencias aceptadas no resuelven exactamente mi problema, ya que no estoy buscando formas de modificar el proyecto de arranque de primavera de la aplicación independiente para que funcione en un contenedor de tomcat externo, pero me gustaría encontrar un solución ''más limpia'' que no involucra en absoluto un arranque de resorte. (No estoy exactamente seguro de cómo comportarme aquí, siendo todavía bastante nuevo en stackoverflow. Espero que abrir una nueva pregunta sea el procedimiento correcto).
No necesita Spring Boot para crear un controlador de descanso.
Siga la documentación de Spring Framework sobre cómo configurar MVC https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#spring-web
La configuración de MVC (
DispatcherServlet
) depende de su versión de primavera, puede usar xml o puede configurar mediante programación:
https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet
Una vez que esto esté configurado, puede agregar un controlador de descanso a su aplicación.
Tenga en cuenta que un controlador de reposo (la anotación
@RestController
) es una anotación de estereotipo que combina
@ResponseBody
y
@Controller
, en otras palabras, el Controlador devuelve un objeto en el cuerpo de la respuesta en lugar de devolver una vista.
Este es un ejemplo perfecto que explica lo que dije anteriormente: http://www.programming-free.com/2014/01/spring-mvc-40-restful-web-services.html