15

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

@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内部服务器错误。

4

3 回答 3

15

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

@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 标准是:yyyy-MM-dd

  • Joda Java 日期 API被认为是更完整的日期/时间实现,一些人认为它比 Java 的本地日期 API 更优化,特别是在解析日期方面。

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

于 2013-02-14T17:00:06.047 回答
0

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

于 2013-02-14T17:07:01.050 回答
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";
}
于 2017-03-28T10:39:37.157 回答