spring-boot
RESTサービス
サーチ…
パラメーター
注釈 | カラム |
---|---|
@コントローラ | 注釈付きクラスが「コントローラ」(Webコントローラ)であることを示します。 |
@RequestMapping | 特定のハンドラクラス(クラスで使用した場合)および/またはハンドラメソッド(メソッドで使用した場合)にWebリクエストをマッピングするアノテーション。 |
method = RequestMethod.GET | HTTPリクエストメソッドのタイプ |
ResponseBody | メソッドの戻り値がWebレスポンス本体にバインドされる必要があることを示す注釈 |
@RestController | @Controller + ResponseBody |
@ResponseEntity | HttpStatusステータスコードを追加するHttpEntityの拡張により、httpコードを返すように制御できます |
RESTサービスの作成
- STS(Spring Starter Project)またはSpring Initializr( https://start.spring.io )を使用してプロジェクトを作成します 。
- pom.xmlにWeb依存関係を追加する:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
またはでウェブを入力しSearch for dependencies
、検索ボックスウェブの依存関係を追加し、zip形式のプロジェクトをダウンロードしてください。
- ドメインクラス(つまりユーザー)を作成する
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クラスを作成し、
@RequestMapping
@Controller
、@RequestMapping
アノテーションを追加する
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- 静的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
]でアプリケーションを実行し、このURLをhttp://localhost:8080/api/users
と呼んでmvn clean install spring-boot:run
我々は持つクラスに注釈を付けることができ
@RestController
、この場合には、我々は、このクラスのすべてのメソッドからResponseBodyを削除することができます(@RestController = @Controller + ResponseBody)
私たちが使用している場合、我々はリターンHTTPコードを制御することができますもう一つのポイントResponseEntity
、同じ以前の関数を実装しますが、@RestController
とResponseEntity
を使用し@RestController
@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ブートによるレストサービスの作成
Jerseyは、Rest Servicesを作成するために利用できる多くのフレームワークの1つです。この例では、JerseyとSpring Bootを使用してRestサービスを作成する方法を示します
1.プロジェクトのセットアップ
STSを使用するか、またはSpring Initializrページを使用して新しいプロジェクトを作成できます。プロジェクトを作成する際には、次の依存関係を含めます。
- ジャージー(JAX-RS)
- ウェブ
コントローラの作成
Jersey Webサービス用のコントローラを作成しましょう
@Path("/Welcome")
@Component
public class MyController {
@GET
public String welcomeUser(@QueryParam("user") String user){
return "Welcome "+user;
}
}
@Path("/Welcome")
注釈は、このコントローラがURIパスに応答する必要があることをフレームワークに示します/ Welcome
@QueryParam("user")
注釈は、 user
名が1つのクエリパラメータを期待していることをフレームワークに示しuser
3.ジャージ構成の配線
SpringブートでJersey Frameworkを設定しましょう: org.glassfish.jersey.server.ResourceConfig
を拡張する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
向けられた要求のみがジャージーフレームワークによって処理されることをフレームワークに指示し、他の要求は引き続きSpringフレームワークによって引き継がれなければなりません。
@ApplicationPath
で構成クラスに注釈を付けることをお勧めします。そうしないと、すべての要求がJerseyによって処理され、要求をバイパスして、必要に応じてSpringコントローラに処理させます。
4.完了
アプリケーションを起動し、次のようなサンプルURLを起動します(ポート8080で実行するようにスプリングブートを設定したと仮定します)。
http://localhost:8080/MyRestService/Welcome?user=User
ブラウザに次のようなメッセージが表示されます。
ようこそユーザー
そして、あなたはSpringブートであなたのJersey Webサービスを使っています
RestTemplate(GET)を使用したREST APIの使用
RestTemplate
使用してREST APIを使用するには、SpringブートRestTemplate
を使用してSpringブートプロジェクトを作成し、 Web依存関係が追加されていることを確認します 。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
プロジェクトを設定したら 、 RestTemplate
Beanを作成します 。これは、すでに生成されているメインクラス内で行うことも、別の設定クラス( @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;
}
}
あなたのクライアントで、RestTemplateをautowireしてRestTemplate
:
@Autowired
private RestTemplate restTemplate;
1人のユーザーを返すREST APIを使用するには、次のコードを使用できます。
String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);
リストやユーザーの配列を返すREST APIを使用して、2つのオプションがあります。配列としてそれを消費するか、
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()
メソッドを使用する必要があります。 RestTemplate.exchange()
、そのサブクラスを作成する必要があります。上記の例では、匿名クラスが使用されています。