Java 使用带有日期参数的URL中的Restful方法

Java 使用带有日期参数的URL中的Restful方法,java,web-services,rest,jakarta-ee,jax-rs,Java,Web Services,Rest,Jakarta Ee,Jax Rs,我有一个restful web服务方法,如下所示: @GET @Path("/generateInfo") @Produces(MediaType.APPLICATION_JSON) public String generateInfo( @QueryParam("a") String a, @QueryParam("b") String b, @QueryParam("date") Date date) { // ...business

我有一个restful 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";
}

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

我建议将日期作为
字符串接受并自己解析它。像这样:

@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

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

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

  • 被认为是日期/时间的更完整的实现,尤其是用于解析日期

  • 通常最好提供日期作为历元时间戳,尤其是当应用程序在不同时区上运行时。但是,在接受历元时间戳时,您必须注意HTTP缓存问题(例如,如果您的客户端没有截断历元时间戳,那么您将获得大量缓存未命中)。我想回顾一下,格式化日期更容易HTTP缓存


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

这是IMHO的首选方式。您的JSON封送器很可能会将
Date
类分解为它的字段,因此您的JSON中最终会出现一个对象
Date
,而不是一个整洁的
字符串
。传递毫秒有效吗?这是一个可接受答案的精确副本,只需在变量名称上做一些小的更改。
@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";
}