spring-boot
REST-services
Zoeken…
parameters
aantekening | Kolom |
---|---|
@Controller | Geeft aan dat een geannoteerde klasse een "Controller" (webcontroller) is. |
@RequestMapping | Annotatie voor het toewijzen van webverzoeken aan specifieke handlerklassen (als we deze met klasse hebben gebruikt) en / of handlermethoden (als we deze met methoden hebben gebruikt). |
method = RequestMethod.GET | Type HTTP-verzoekmethoden |
responseBody | Annotatie die een retourwaarde van een methode aangeeft, moet worden gebonden aan de webrespons |
@RestController | @Controller + ResponseBody |
@ResponseEntity | Uitbreiding van HttpEntity die een HttpStatus-statuscode toevoegt, we kunnen de retour-http-code beheren |
Een REST-service maken
- Maak een project met STS (Spring Starter Project) of Spring Initializr (op https://start.spring.io ).
- Voeg een webafhankelijkheid toe aan uw pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
of typ web in het zoekvak Search for dependencies
, voeg webafhankelijkheid toe en download gezipte projecten.
- Maak een domeinklasse (gebruiker)
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() {}
}
- Maak de klasse UserController en voeg annotaties bij
@Controller
,@RequestMapping
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- Definieer de statische lijst met gebruikersvariabele om de database te simuleren en voeg 2 gebruikers toe aan de lijst
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);
}
- Maak een nieuwe methode om alle gebruikers in de statische lijst te retourneren (getAllUsers)
@RequestMapping(value = "users", method = RequestMethod.GET)
public @ResponseBody List<User> getAllUsers() {
return users;
}
Voer de applicatie uit [door
mvn clean install spring-boot:run
] en noem deze URLhttp://localhost:8080/api/users
We kunnen de klasse annoteren met
@RestController
, en in dit geval kunnen we de ResponseBody van alle methoden in deze klasse verwijderen(@RestController = @Controller + ResponseBody)
, nog een punt kunnen we de retour-http-code beheren als weResponseEntity
, we zullen dezelfde eerdere functies implementeren, maar met behulp van@RestController
enResponseEntity
@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);
}
}
}
probeer nu de toepassing uit te voeren en noem deze URL http: // localhost: 8080 / api2 / gebruikers
Een rustservice maken met JERSEY en Spring Boot
Jersey is een van de vele frameworks die beschikbaar zijn om Rest Services te maken. In dit voorbeeld ziet u hoe u Rest Services kunt maken met Jersey en Spring Boot
1.Projectinstellingen
U kunt een nieuw project maken met STS of met behulp van de Spring Initializr- pagina. Neem tijdens het maken van een project de volgende afhankelijkheden mee:
- Jersey (JAX-RS)
- Web
2. Een controller maken
Laten we een controller maken voor onze Jersey Web Service
@Path("/Welcome")
@Component
public class MyController {
@GET
public String welcomeUser(@QueryParam("user") String user){
return "Welcome "+user;
}
}
@Path("/Welcome")
geeft aan het framework aan dat deze controller moet reageren op het URI-pad / Welcome
@QueryParam("user")
geeft aan het framework aan dat we één query-parameter verwachten met de naam user
3. bedrading Jersey configuraties
Laten we nu Jersey Framework met Spring Boot configureren: maak een klasse, in plaats een 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")
geeft aan het framework aan dat alleen verzoeken die zijn gericht aan het pad /MyRestService
zijn bedoeld om te worden afgehandeld door het jersey-framework, andere verzoeken moeten nog steeds worden behandeld door spring-framework.
Het is een goed idee om de configuratieklasse te annoteren met @ApplicationPath
, anders worden alle aanvragen afgehandeld door Jersey en kunnen we deze niet omzeilen en een veercontroller deze laten verwerken indien nodig.
4.done
Start de applicatie en start een voorbeeld-URL zoals (ervan uitgaande dat u spring boot hebt geconfigureerd om te worden uitgevoerd op poort 8080):
http://localhost:8080/MyRestService/Welcome?user=User
U zou een bericht in uw browser moeten zien zoals:
Welkom gebruiker
En u bent klaar met uw Jersey Web Service met Spring Boot
Een REST API gebruiken met RestTemplate (GET)
Om een REST API met consumeren RestTemplate
, maak een Spring boot project met de lente boot initialzr en zorg ervoor dat de Web afhankelijkheid wordt toegevoegd:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Nadat u uw project hebt opgezet, maakt u een RestTemplate
boon. U kunt dit doen binnen de hoofdklasse die al is gegenereerd, of binnen een afzonderlijke configuratieklasse (een klasse geannoteerd met @Configuration
):
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
Maak daarna een domeinklasse, vergelijkbaar met wat u moet doen bij het maken van een REST-service .
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;
}
}
Voer in uw client de RestTemplate
:
@Autowired
private RestTemplate restTemplate;
Om een REST API te gebruiken die een enkele gebruiker retourneert, kunt u nu gebruiken:
String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);
Als u een REST API gebruikt die een lijst of array van gebruikers retourneert, hebt u twee opties. Gebruik het als een array:
String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);
Of consumeer het met de 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();
Houd er rekening mee dat wanneer u ParameterizedTypeReference
, u de geavanceerdere methode RestTemplate.exchange()
gebruiken en hiervan een subklasse moet maken. In het bovenstaande voorbeeld wordt een anonieme klasse gebruikt.