实现REST API,在Servlet中切换XML和JSON

时间:2009-09-23 02:13:23

标签: java json tomcat rest

Twitter的REST api允许您在URI的末尾附加JSON或XML。

e.g。

http://twitter.com/statuses/public_timeline.json
http://twitter.com/statuses/public_timeline.xml

在servlet的上下文中,状态将是webapp上下文名称& public_timeline.json映射到某个servlet。我想维护一个servlet来执行调度。可以在servlet中完成吗?

4 个答案:

答案 0 :(得分:2)

Servlet中的URL映射仅支持扩展匹配,而不支持前缀匹配。所以这不起作用,

  <url-pattern>/public_timeline.*</servlet-class>

这是我的建议,

<servlet-mapping>
  <url-pattern>/*</servlet-class>
  <servlet-name>YourServlet</servlet-class>
</servlet-mapping>

在servlet中,你可以这样做,

    String path = request.getPathInfo();

    if (path == null) return;

    int index = path.indexOf('/');
    String api;
    if (index < 0) 
        api = path;
    else
        api = path.substring(index+1);

        if (api.equals("public_timeline.json"))
            // Process it as JSON

        if (api.equals("public_timeline.xml"))
            // Process it as XML

大多数API使用format参数来指示响应格式。我认为这是更好的方式。

答案 1 :(得分:1)

在Java中,如果您将JAXRS用于其他服务,请注释您的REST服务方法,如:

@Path("/statuses/public_timeline{fileExt}")

然后将以下内容添加到方法参数:

@PathParam(value="fileExt") String fileExt

fileExt变量将是您的扩展名。我认为这将是使用JAXRS

执行此操作的标准REST方式

答案 2 :(得分:0)

是的,这是可能的。

查看web.xml文件,您可以使用以下模式:

<servlet-mapping>
    <url-pattern>public_timeline.*</servlet-class>
    <servlet-name>myservlet</servlet-class>
</servlet-mapping>

我认为你甚至可以使用public_timeline。[json | xml]

答案 3 :(得分:0)

你可以在url-pattern中进行简单的全局匹配:

<servlet>
  <servlet-name>public_timeline</servlet-name>
  <servlet-class>your.package.PublicTimelineServlet</servlet-class>
</servlet>

<servlet-mapping>
  <url-pattern>/public_timeline.*</servlet-class>
  <servlet-name>public_timeline</servlet-class>
</servlet-mapping>