1

同じRESTfulWebサービスパスを使用して、xmlまたはjson、あるいはxslヘッダーを持つxmlを生成したいと思います。Javaで任意のフレームワーク(ジャージまたはresteasy)を使用することは可能ですか?例えば:

@Path("/person")
public class PersonService {

    @GET
    @Path("/find")
    public Person find(@QueryParam("name") String name, @QueryParam("outputformat") String outputformat) {
            // do some magic to change output format
            return dao.findPerson(name);
    }
}
4

3 に答える 3

3

クエリ文字列を受け取り、それに応じてリクエストのacceptヘッダーを設定するために使用するサーブレットフィルタを作成できる場合は、一致する@Consumesで注釈が付けられているメソッドにジャージをディスパッチする必要があります。

たとえば、サーブレットフィルタはリクエスト「?outputFormat = xml」をインターセプトし、Acceptヘッダーを「application/xml」に設定します。次に、ジャージは、リソース内のどのメソッドに次の注釈が付けられているかにディスパッチする必要があります。@Consumes("application/xml")

この質問は役立つかもしれません:REST。ジャージー。返すタイプをプログラムで選択する方法:JSONまたはXML?

于 2013-02-01T17:55:09.717 に答える
1

また、Jersey ServletContainerを簡単にカスタマイズでき、渡すために別のパラメーターは必要ありません。URLで.jsonまたは.xmlを使用して表現をネゴシエートできます。

public class MyServletContainer extends ServletContainer {

  @Override
  protected void configure(ServletConfig servletConfig, ResourceConfig resourceConfig, WebApplication webApplication) {
    super.configure(servletConfig, resourceConfig, webApplication);
    resourceConfig.getMediaTypeMappings().put("json", MediaType.APPLICATION_JSON_TYPE);
    resourceConfig.getMediaTypeMappings().put("xml", MediaType.APPLICATION_XML_TYPE);
  }

}

web.xmlで、以下に示すようにカスタムサーブレットを定義できます。

  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.MyServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.sun.jersey.MyWebApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
于 2013-02-02T09:40:12.577 に答える
0

ジャージーを使用して、注釈を使用できます@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})。アプリケーションにもPOJOのマッピング機能を追加する必要があります。web.xmlファイルに含めるのは

<filter>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

他の構成が必要になりますが、それはすべてドキュメントhttp://jersey.java.net/nonav/documentation/latest/user-guide.htmlにあります。

于 2013-02-01T17:51:08.400 に答える