spring-boot
Servizi REST
Ricerca…
Parametri
Annotazione | Colonna |
---|---|
@Controller | Indica che una classe annotata è un "Controller" (controller web). |
@RequestMapping | Annotazione per mappare le richieste Web su classi di gestori specifici (se usato con classe) e / o metodi handler (se usato con metodi). |
method = RequestMethod.GET | Tipo di metodi di richiesta HTTP |
responseBody | L'annotazione che indica un valore di ritorno del metodo deve essere associato al corpo della risposta Web |
@RestController | @Controller + ResponseBody |
@ResponseEntity | Estensione di HttpEntity che aggiunge un codice di stato HttpStatus, possiamo controllare il codice http di ritorno |
Creazione di un servizio REST
- Creare un progetto usando STS (Spring Starter Project) o Spring Initializr (all'indirizzo https://start.spring.io ).
- Aggiungi una dipendenza Web nel tuo pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
oppure digitare web nella casella di ricerca Search for dependencies
, aggiungere dipendenza Web e scaricare il progetto zippato.
- Creare una classe di dominio (es. Utente)
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() {}
}
- Crea una classe UserController e aggiungi le annotazioni
@Controller
,@RequestMapping
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- Definisci la variabile degli utenti dell'elenco statico per simulare il database e aggiungere 2 utenti all'elenco
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);
}
- Crea un nuovo metodo per restituire tutti gli utenti nell'elenco statico (getAllUsers)
@RequestMapping(value = "users", method = RequestMethod.GET)
public @ResponseBody List<User> getAllUsers() {
return users;
}
Esegui l'applicazione [da
mvn clean install spring-boot:run
] e chiama questo URLhttp://localhost:8080/api/users
Possiamo annotare la classe con
@RestController
, e in questo caso possiamo rimuovere ResponseBody da tutti i metodi in questa classe,(@RestController = @Controller + ResponseBody)
, un altro punto possiamo controllare il codice http di ritorno se usiamoResponseEntity
, implementeremo le stesse funzioni precedenti ma@RestController
eResponseEntity
@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);
}
}
}
ora prova a eseguire l'applicazione e chiama questo URL http: // localhost: 8080 / api2 / users
Creazione di un servizio di riposo con JERSEY e Spring Boot
Jersey è uno dei molti framework disponibili per creare Rest Services. Questo esempio ti mostrerà come creare Rest Services usando Jersey e Spring Boot
1. Setup del progetto
Puoi creare un nuovo progetto usando STS o usando la pagina Spring Initializr . Durante la creazione di un progetto, includere le seguenti dipendenze:
- Maglia (JAX-RS)
- web
2. Creazione di un controller
Cerchiamo di creare un controller per il nostro servizio Web Jersey
@Path("/Welcome")
@Component
public class MyController {
@GET
public String welcomeUser(@QueryParam("user") String user){
return "Welcome "+user;
}
}
@Path("/Welcome")
annotazione @Path("/Welcome")
indica al framework che questo controller deve rispondere al percorso / Welcome dell'URI
@QueryParam("user")
indica al framework che ci aspettiamo un parametro di query con il nome user
3. Configurazioni della maglia del cablaggio
Ora configuriamo Jersey Framework con Spring Boot: crea una classe, piuttosto un componente spring che estende 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")
indica al framework che solo le richieste dirette al percorso /MyRestService
sono destinate a essere gestite dal framework jersey, altre richieste dovrebbero comunque continuare a essere gestite dal framework di primavera.
È una buona idea annotare la classe di configurazione con @ApplicationPath
, altrimenti tutte le richieste saranno gestite da Jersey e non saremo in grado di aggirarlo e lasciare che un controller a molla lo gestisca se necessario.
4.Done
Avvia l'applicazione e attiva un URL di esempio come (Supponendo che tu abbia configurato l'avvio a molla per l'esecuzione sulla porta 8080):
http://localhost:8080/MyRestService/Welcome?user=User
Dovresti vedere un messaggio nel tuo browser come:
Benvenuto Utente
E hai finito con il tuo servizio Web Jersey con Spring Boot
Consumare un'API REST con RestTemplate (GET)
Per utilizzare un'API REST con RestTemplate
, creare un progetto di avvio Spring con initialzr di avvio Spring e assicurarsi che venga aggiunta la dipendenza Web :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Una volta impostato il progetto , crea un bean RestTemplate
. Puoi farlo all'interno della classe principale che è già stata generata o all'interno di una classe di configurazione separata (una classe annotata con @Configuration
):
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Successivamente, crea una classe di dominio, simile a come dovresti fare quando crei un servizio REST .
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;
}
}
Nel tuo client, autowire il RestTemplate
:
@Autowired
private RestTemplate restTemplate;
Per consumare un'API REST che restituisce un singolo utente, ora puoi utilizzare:
String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);
Utilizzando un'API REST che restituisce un elenco o un array di utenti, hai due opzioni. Consumalo come un array:
String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);
Oppure consumalo usando 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();
Tieni presente che quando si utilizza ParameterizedTypeReference
, sarà necessario utilizzare il metodo RestTemplate.exchange()
più avanzato e sarà necessario crearne una sottoclasse. Nell'esempio sopra, viene utilizzata una classe anonima.