Java - 解析RESTful资源URL的更好方法

dsw*_*w88 5 java rest servlets restful-url

我是用Java开发Web服务的新手(之前我已经用PHP和Ruby完成了它们).我正在编写一个具有以下格式的资源:

<URL>/myService/<domain>/<app_name>/<system_name>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有一个三级资源标识符,我正在尝试找出解析它的最佳方法.我正在添加此新服务的应用程序不使用Jersey或任何类似的RESTful框架.相反,它只是扩展了HttpServlet.

目前他们正在遵循这样的算法:

  • 呼叫 request.getPathInfo()
  • 用"."替换路径信息中的"/"字符.人物
  • 使用String.substring方法从pathInfo字符串中提取此资源的各条信息.

这对我来说似乎并不优雅,我正在寻找一种更好的方式.我知道使用javax.ws.rs包可以很容易(使用@Path和@PathParam注释),但使用Jersey可能不是一个选项.

仅使用基本HttpServletRequest对象和标准Java库,是否有比上述方法更好的方法来解析此信息?

Don*_*Yoo 9

球衣UriTemplate怎么样?

import com.sun.jersey.api.uri.UriTemplate;

...

String path = "/foos/foo/bars/bar";

Map<String, String> map = new HashMap<String, String>();
UriTemplate template = new UriTemplate("/foos/{foo}/bars/{bar}");
if( template.match(path, map) ) {
    System.out.println("Matched, " + map);
} else {
    System.out.println("Not matched, " + map);
}       
Run Code Online (Sandbox Code Playgroud)


Jun*_*san 0

我相信首先您需要创建一个框架,用于将 REST 方法和类+方法映射存储在属性文件或内存数据结构中。然后编写一个顶级 servlet 接受所有 REST 请求。根据从上下文开始的 URL,您可以尝试从属性文件/内存数据结构中获取映射,以找出需要调用哪个类及其哪个方法。然后利用反射您可以调用所需的方法。获取方法响应并将其编组为所需的内容类型格式,然后发送回 servlet 响应输出流。