spring-boot
Услуги REST
Поиск…
параметры
аннотирование | колонка |
---|---|
@Controller | Указывает, что аннотированный класс является «контроллером» (веб-контроллером). |
@RequestMapping | Аннотации для сопоставления веб-запросов на определенные классы обработчиков (если мы использовали с классом) и / или методы обработчика (если мы использовали методы). |
метод = RequestMethod.GET | Тип методов HTTP-запроса |
ResponseBody | Аннотации, указывающие возвращаемое значение метода, должны быть привязаны к телу веб-ответа |
@RestController | @Controller + ResponseBody |
@ResponseEntity | Расширение HttpEntity, которое добавляет код состояния HttpStatus, мы можем контролировать код HTTP возврата |
Создание REST-сервиса
- Создайте проект, используя STS (Spring Starter Project) или Spring Initializr (на странице https://start.spring.io ).
- Добавьте веб-зависимость в свой pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
или введите веб - в Search for dependencies
окна поиска, добавить веб - зависимость и скачать архивный проект.
- Создание класса домена (т.е. пользователя)
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() {}
}
- Создайте класс UserController и добавьте аннотации
@Controller
,@RequestMapping
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- Определите статическую переменную List List для имитации базы данных и добавьте 2 пользователей в список
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);
}
- Создайте новый метод для возврата всех пользователей в статический список (getAllUsers)
@RequestMapping(value = "users", method = RequestMethod.GET)
public @ResponseBody List<User> getAllUsers() {
return users;
}
Запустите приложение [по
mvn clean install spring-boot:run
] и вызовите этот URLhttp://localhost:8080/api/users
Мы можем аннотировать класс с помощью
@RestController
, и в этом случае мы можем удалить ResponseBody из всех методов этого класса,(@RestController = @Controller + ResponseBody)
, еще одна точка, с которой мы можем управлять обратным кодом http, если мы используемResponseEntity
, мы будем выполнять те же предыдущие функции, но используя@RestController
иResponseEntity
@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);
}
}
}
теперь попробуйте запустить приложение и вызвать этот URL http: // localhost: 8080 / api2 / users
Создание службы отдыха с помощью JERSEY и Spring Boot
Джерси - одна из многих рамок, доступных для создания служб отдыха. Этот пример покажет вам, как создавать службы отдыха с использованием Jersey и Spring Boot
1.Проект установки
Вы можете создать новый проект с использованием STS или с помощью страницы Spring Initializr . При создании проекта включите следующие зависимости:
- Джерси (JAX-RS)
- Web
2.Создание контроллера
Давайте создадим контроллер для веб-службы Jersey
@Path("/Welcome")
@Component
public class MyController {
@GET
public String welcomeUser(@QueryParam("user") String user){
return "Welcome "+user;
}
}
@Path("/Welcome")
аннотация указывает на структуру, в которой этот контроллер должен отвечать на путь URI / приветствие
@QueryParam("user")
указывает на фреймворк, который мы ожидаем от одного параметра запроса с именем user
3.Wiring Jersey Конфигурации
Давайте теперь настроим Jersey Framework с Spring Boot: создаем класс, а скорее весенний компонент, который расширяет 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")
указывает на фреймворк, в котором только запросы, направленные на путь /MyRestService
, должны обрабатываться каркасом джерси, другие запросы должны по-прежнему обрабатываться весной.
Это хорошая идея, чтобы аннотировать класс конфигурации с @ApplicationPath
, иначе все запросы будут обработаны Джерси, и мы не сможем обойти его, и пусть контроллер пружины обработает его, если потребуется.
4.Done
Запустите приложение и запустите пример URL-адреса (предположим, что вы настроили загрузку весны на порт 8080):
http://localhost:8080/MyRestService/Welcome?user=User
В вашем браузере должно появиться сообщение:
Приветственный пользователь
И вы закончили с вашим веб-сервисом Jersey с Spring Boot
Использование API REST с помощью RestTemplate (GET)
Чтобы использовать REST API с помощью RestTemplate
, создайте проект загрузки Spring с начальным загрузчиком Spring и убедитесь, что добавлена зависимость Web :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
После того, как вы создали свой проект , создайте компонент RestTemplate
. Вы можете сделать это в основном классе, который уже был сгенерирован, или в отдельном классе конфигурации (класс, аннотированный с помощью @Configuration
):
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
После этого создайте класс домена, аналогичный тому, как вы должны делать при создании службы 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;
}
}
В вашем клиенте, autwire RestTemplate
:
@Autowired
private RestTemplate restTemplate;
Чтобы использовать REST API, который возвращает одного пользователя, вы можете теперь использовать:
String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);
Используя API REST, который возвращает список или массив пользователей, у вас есть два варианта. Или употребляйте его как массив:
String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);
Или используйте его с помощью 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();
Помните, что при использовании ParameterizedTypeReference
вам придется использовать более продвинутый RestTemplate.exchange()
и вам придется создать его подкласс. В приведенном выше примере используется анонимный класс.