spring-boot
REST-Dienste
Suche…
Parameter
Anmerkung | Säule |
---|---|
@Regler | Gibt an, dass eine kommentierte Klasse ein "Controller" (Webcontroller) ist. |
@RequestMapping | Anmerkung zum Mapping von Webanforderungen auf bestimmte Handler-Klassen (wenn wir mit class verwendet wurden) und / oder Handler-Methoden (wenn wir mit Methoden verwendet wurden) |
method = RequestMethod.GET | Art der HTTP-Anforderungsmethoden |
ResponseBody | Anmerkungen, die angeben, dass ein Methodenrückgabewert angezeigt wird, sollten an den Webantworthauptteil gebunden werden |
@RestController | @Controller + ResponseBody |
@ResponseEntity | Die Erweiterung von HttpEntity, die einen HttpStatus-Statuscode hinzufügt, kann den zurückgegebenen http-Code steuern |
Erstellen eines REST-Service
- Erstellen Sie ein Projekt mit STS (Spring Starter Project) oder Spring Initializr (unter https://start.spring.io ).
- Fügen Sie eine Webabhängigkeit in Ihrer pom.xml hinzu:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
oder geben Sie web in das Suchfeld Nach Search for dependencies
suchen ein, fügen Sie eine Webabhängigkeit hinzu und laden Sie ein gezipptes Projekt herunter.
- Erstellen Sie eine Domänenklasse (z. B. Benutzer)
public class User {
private Long id;
private String userName;
private String password;
private String email;
private String firstName;
private String lastName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", email=" + email
+ ", firstName=" + firstName + ", lastName=" + lastName + "]";
}
public User(Long id, String userName, String password, String email, String firstName, String lastName) {
super();
this.id = id;
this.userName = userName;
this.password = password;
this.email = email;
this.firstName = firstName;
this.lastName = lastName;
}
public User() {}
}
- Erstellen Sie die UserController-Klasse und fügen Sie
@Controller
,@RequestMapping
Anmerkungen hinzu
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- Definieren Sie die statische Liste Benutzervariable, um die Datenbank zu simulieren, und fügen Sie der Liste zwei Benutzer hinzu
private static List<User> users = new ArrayList<User>();
public UserController() {
User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
users.add(u1);
users.add(u2);
}
- Neue Methode erstellen, um alle Benutzer in der statischen Liste zurückzugeben (getAllUsers)
@RequestMapping(value = "users", method = RequestMethod.GET)
public @ResponseBody List<User> getAllUsers() {
return users;
}
Führen Sie die Anwendung [von
mvn clean install spring-boot:run
] aus und rufen Sie diese URLhttp://localhost:8080/api/users
Wir können die Klasse mit Anmerkungen versehen
@RestController
, und in diesem Fall können wir die Response von allen Methoden in dieser Klasse entfernen(@RestController = @Controller + ResponseBody)
, ein weiterer Punkt wir die Rückkehr http Code steuern können , wenn wir verwendenResponseEntity
, Wir werden dieselben vorherigen Funktionen implementieren, jedoch@RestController
undResponseEntity
@RestController
@RequestMapping(value = "api2")
public class UserController2 {
private static List<User> users = new ArrayList<User>();
public UserController2() {
User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
users.add(u1);
users.add(u2);
}
@RequestMapping(value = "users", method = RequestMethod.GET)
public ResponseEntity<?> getAllUsers() {
try {
return new ResponseEntity<>(users, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
Versuchen Sie jetzt, die Anwendung auszuführen, und rufen Sie diese URL http: // localhost: 8080 / api2 / users auf
Erstellen eines Ruhedienstes mit JERSEY und Spring Boot
Jersey ist eines der vielen verfügbaren Frameworks zum Erstellen von Rest Services. In diesem Beispiel wird beschrieben, wie Rest Services mit Jersey und Spring Boot erstellt werden
1.Projekt-Setup
Sie können ein neues Projekt mit STS oder über die Seite Spring Initializr erstellen. Berücksichtigen Sie beim Erstellen eines Projekts die folgenden Abhängigkeiten:
- Trikot (JAX-RS)
- Netz
2. Controller erstellen
Lassen Sie uns einen Controller für unseren Jersey Web Service erstellen
@Path("/Welcome")
@Component
public class MyController {
@GET
public String welcomeUser(@QueryParam("user") String user){
return "Welcome "+user;
}
}
@Path("/Welcome")
Annotation @Path("/Welcome")
gibt dem Framework an, dass dieser Controller auf den URI-Pfad / Welcome antworten soll
@QueryParam("user")
Anmerkung zeigt den Rahmen , dass wir einen Abfrageparameter mit dem Namen erwarten user
3.Wiring Jersey-Konfigurationen
Lassen Sie uns nun Jersey Framework mit Spring Boot konfigurieren: Erstellen Sie eine Klasse, eher eine org.glassfish.jersey.server.ResourceConfig
die org.glassfish.jersey.server.ResourceConfig
:
@Component
@ApplicationPath("/MyRestService")
public class JerseyConfig extends ResourceConfig {
/**
* Register all the Controller classes in this method
* to be available for jersey framework
*/
public JerseyConfig() {
register(MyController.class);
}
}
@ApplicationPath("/MyRestService")
gibt dem Framework an, dass nur Anforderungen, die an den Pfad /MyRestService
sind, vom Jersey-Framework verarbeitet werden sollen, andere Anforderungen sollten weiterhin vom Spring-Framework verarbeitet werden.
Es ist eine gute Idee, die Konfigurationsklasse mit @ApplicationPath
zu kommentieren, andernfalls werden alle Anforderungen von Jersey bearbeitet, und wir können sie nicht umgehen und können bei Bedarf einen Feder-Controller verwenden.
4.Done
Starten Sie die Anwendung und lösen Sie eine Beispiel-URL aus (Angenommen, Sie haben Spring Boot für die Ausführung auf Port 8080 konfiguriert):
http://localhost:8080/MyRestService/Welcome?user=User
Sie sollten eine Nachricht in Ihrem Browser sehen:
Willkommener Benutzer
Und Sie sind fertig mit Ihrem Jersey-Webdienst mit Spring Boot
REST-API mit RestTemplate (GET) verwenden
Um einen REST - API mit verbrauchen RestTemplate
, ein Frühlings - Boot - Projekt mit dem Spring - Boot initialzr zu schaffen und sicherzustellen , dass die Web - Abhängigkeit angefügt:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Wenn Sie Ihr Projekt eingerichtet haben , erstellen Sie eine RestTemplate
Bean. Dies kann in der bereits generierten Hauptklasse oder in einer separaten Konfigurationsklasse (einer mit @Configuration
annotierten @Configuration
) erfolgen:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Erstellen Sie anschließend eine Domänenklasse, ähnlich wie Sie beim Erstellen eines REST-Diensts vorgehen müssen .
public class User {
private Long id;
private String username;
private String firstname;
private String lastname;
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
Aktivieren RestTemplate
in Ihrem Client die RestTemplate RestTemplate
:
@Autowired
private RestTemplate restTemplate;
Um eine REST-API zu verwenden, die einen einzelnen Benutzer zurückgibt, können Sie jetzt Folgendes verwenden:
String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);
Wenn Sie eine REST-API verwenden, die eine Liste oder ein Array von Benutzern zurückgibt, haben Sie zwei Möglichkeiten. Entweder verbrauchen Sie es als Array:
String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);
Oder verbrauchen Sie es mit der ParameterizedTypeReference
:
String url = "http://example.org/path/to/api";
ResponseEntity<List<User>> response = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<User>>() {});
List<User> data = response.getBody();
RestTemplate.exchange()
Sie, dass Sie bei der Verwendung von ParameterizedTypeReference
die erweiterte RestTemplate.exchange()
Methode verwenden und eine Unterklasse davon erstellen müssen. Im obigen Beispiel wird eine anonyme Klasse verwendet.