13. Web
● メソッド
– リソースに対する操作の種類。主にGET/POST/PUT/DELETEを
用いる。
メソッド CRUD リソース変化 HTTP本体
GET R なし なし リソースの返却を要
求する
POST C あり あり リソースの新規作成
を要求する
PUT U あり あり リソースの更新を要
求する
DELETE D あり なし リソースの削除を要
求する
他にもHEAD/TRACE/OPTIONS/CONNECTがあります
13
27. JAX-RSモデル
● コンテンツタイプの使用と生成
– リクエストのコンテンツタイプに応じて呼び出すメソッドを振り分け
る→@Consumes
– リクエストのAcceptに応じて呼び出すメソッドを振り分ける→@Pr
oduces
@Path(“/items”)
@Produces(MediaType.TEXT_PLAIN)
public class CustomerResource {
@GET
public String getAsPlainText() {...}
Accept: text/plain @GET
@Produces(MediaType.TEXT_HTML)
Accept: text/html public String getAsHtml() {...}
@GET
@Produces(MediaType.Application_JSON)
Accept: application/json public List<Customer> getAsJson() {…}
@PUT
@Consumes(MediaType.Application_XML)
Content-Type: application/xml public Response createCustomer(InputStream is) {...}
}
27
28. JAX-RSモデル
● エンティティプロバイダ
– HTTP本体(JSONやXML等)をJavaオブジェクトに変換、もしくはその
逆を行うマッピングサービス。
– デフォルトでXMLやJSON用(JAXBElement)のプロバイダは用意さ
れているので、通常は自作する必要はない。(JAXB/BadgerFishアダ
プタ)
@Provider
@Consumes(MediaType.APPLICATION_XML)
public class CustomerReader implements MessageBodyReader<Customer> {
@Override
public boolean isReadable(...) {…}
@Override
public Customer readFrom(..., InputStream inputStream) {…}
}
@Provider
@Produces(MediaType.TEXT_PLAIN)
public class CustomerWriter implements MessageBodyWriter<Customer> {
@Override
public boolean isWritable(...) {…}
@Override
public void writeTo(Customer customer, ..., OutputStream outputStream) {…}
}
28
29. JAX-RSモデル
● エンティティプロバイダ(続き)
@Path(“/customers”)
GET public class CustomerResource {
@GET
Accept: XML
public List<Customer> get...() {...}
@GET
XML @Path(“/{customerid}”)
CustomerをXMLにwriteTo public Customer get...(
するMessageBodyWriter @PathParam(“customerid”) String customerId,
@QueryParam(“zip”) String zip) {…}
POST CustomerをXMLからreadFrom @POST
Accept: XML するMessageBodyReader public Response create...(
+XML @QueryParam(“zip”) String zip,
Customer customer) {…}
(デフォルトの)XML出力 @PUT
MessageBodyWriter public Response update...(
XML JAXBElement<Customer>) {...}
}
29
30. JAX-RSモデル
● HTTPメソッド
– publicメソッドに@GET/@POST/@PUT/@DELETEを付加すると
リソースメソッドとなる。
– リソースメソッドはvoid、ResponseもしくはJava型を返却。Java型
の場合はエンティティプロバイダによってXMLやJSONに変換され
る。
@Path(“/customers”)
Public class CustomerResource {
@GET
Public List<Customer> getListOfCustomers() {…}
@POST
@Consumes(MediaType.APPLICATION_XML)
public Response createCustomer(JAXBElement<Customer> element) {…}
@PUT
@Path(“/{customerid}”)
@Consumes(MediaType.APPLICATION_XML)
public Response updateCustomer(@PathParam(“customerid”) String customerId,
JAXBElement<Customer> element) {…}
@DELETE
@Path(“/{customerid}”)
public void deleteCustomer(@PathParam(“customerid”) String customerId) {…}
}
30