1

私は Jersey を使用しており、既存のデータ サービスを RESTful データ サービスに変換しています。正常に変換できた最も単純な GET と PUT。しかし、以下は私が変換できないものです:

  1. X Get (T) // 複雑な結果を持つ複雑なクエリの場合
  2. X Post (T) // 複雑な結果を作成する場合
  3. X PUT (T) // 成功メッセージ オブジェクトで更新するため

ここで、T と X は複合オブジェクトです

@consume と @produce を使用して GET で複雑なオブジェクトを使用して @queryparam、@pathparam を試しましたが、うまくいきませんでした。また、エンコードされたURLでPOST(実際にはGETが必要でしたが)を試しましたが、それも機能しませんでした。

助けてください。それを行うサンプルコードが必要です。

4

1 に答える 1

2

クエリは実際には URL であるため、REST は複雑なクエリを処理するようには設計されていません。リソースを取得するときは、必要なリソースの ID を指定します。これは単なる数字または文字列であり、たとえば URL で簡単に表現できます。

http://host/employee/57

従業員57を取得します。要件がより複雑な場合は、いくつかのパラメーターを渡す検索メソッドを使用することをお勧めします。ここで使用できます@QueryParamが、これは実際には純粋な形式の REST ではありません。

データを POST または PUT する場合は、GET を行う場合と同じ URL を使用しますが、今回はコンテンツ本文でデータを送信します。オブジェクトをシリアル化して GET リクエストに返すことができるので、クライアントもオブジェクトをシリアル化して PUT または POST で送信できるようにする必要があります。

GET と POST の例を次に示します。

@XmlType
public class Employee {
  private int id;
  private String name;

  //getters and setters
}


@Path("/employee")
public class EmployeeService {

  @GET
  @Path("/{id}")
  @Produces(MediaType.APPLICATION_XML)
  public Employee get(@PathParam("id") String id) {
    Employee e = employeeDao.getEmployee(id);
    if (e != null) {
      return e;
    } else {
      throw new WebApplicationException(404);
    }
  }

  @POST
  @Consumes(MediaType.APPLICATION_XML)
  @Produces(MediaType.APPLICATION_XML)
  public Employee post(Employee employee) {
    return employeeDao.insertEmployee(employee); //Assumes your DAO sets the ID
  }

}
于 2013-03-28T14:03:42.460 に答える