使用Date Param Java从URL中使用Restful方法

Ser*_*gio 14 java rest web-services jax-rs java-ee

我有一个像这样的宁静的Web服务方法:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") Date date) {
    // ...business code...
    return "hello world";
}
Run Code Online (Sandbox Code Playgroud)

如何从WebBrowser中调用该方法?问题是Date当我尝试给我404找不到或500内部服务器错误时的参数.

pes*_*lla 14

我建议接受日期作为一个String并自己解析它.像这样:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") String date) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dateObj = sdf.parse(date);

    return "hello world";
}
Run Code Online (Sandbox Code Playgroud)

通过浏览器发出此请求的方法是:

http://localhost/your_service/generateInfo?date=2013-02-14
Run Code Online (Sandbox Code Playgroud)

解析日期时要考虑的事项:

  • SimpleDateFormat解析不同的日期格式非常灵活.日期字符串的ISO标准是:yyyy-MM-dd

  • 乔达的Java API的日期被接受为一个更完整的实现日期/时间,一些人认为它比Java的原生API日期更加优化尤其是对于解析日期.

  • 提供日期作为纪元时间戳通常更好,特别是如果您的应用程序在不同的时区运行.但是,在接受纪元时间戳时,您必须了解HTTP缓存问题(例如,如果您的客户端没有截断纪元时间戳,那么您将获得大量缓存未命中).我会回顾ISO-8601,因为格式化日期更容易进行HTTP缓存.