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

时间:2013-02-14 16:48:24

标签: java web-services rest java-ee jax-rs

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

@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";
}

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

3 个答案:

答案 0 :(得分: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";
}

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

http://localhost/your_service/generateInfo?date=2013-02-14

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

  • SimpleDateFormat非常灵活,可以解析不同的日期格式。 ISO standard for date字符串为:yyyy-MM-dd

  • Joda Java date API被视为更完整的日期/时间实现,some believe that it is more optimised than Java's native date API尤其适用于解析日期。

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

答案 1 :(得分:0)

这取决于URL中日期的格式。 根据{{​​3}},构造函数Date(String)可以处理的任何格式都应该有效。如果您的日期格式不同而您无法更改,则必须使用pestrella的解决方案并以字符串形式接收日期并自行转换。

答案 2 :(得分:0)

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)

public String generateInfo(
 @QueryParam("a") String a,   
 @QueryParam("b") String b, 
 @QueryParam("date") String str_date) {

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

 Date date = df.parse(str_date);
 return "hello world";
}