路径中的日期误导了请求URI

时间:2019-07-05 19:10:03

标签: java spring jax-rs

我有一个日期格式为“无法加载rs / Service / Store / Grantor / 122/5801 / DUE / 10/30/2017 / /true?request.preventCache=1562353357306 status:404”的URL其中10/30/2017是它具有的Java代码中的日期

@GET
@Path("/dd/{sp}/{rpt}/{ter}/{date}/{grant}/{refresh}")
@Produces(MediaType.APPLICATION_JSON)

public List<ReportPeriodBean> getApprovals(@PathParam("sp") String sp,
        @PathParam("rpt") String rpt, @PathParam("ter") String ter,
        @PathParam("date") String date,
        @PathParam("grant") String grant, @PathParam("refresh") boolean refresh) throws Exception {

我应该如何允许我的URL以正确的日期格式显示,并让控制者在春季仍然负责其余的内容?

1 个答案:

答案 0 :(得分:2)

要与描述中的URL匹配,最好的选择是转义不同的日期组成部分,如月,日和年。然后,在方法内部,可以将它们拼凑在一起以成为Date对象。

要全部捕获它们,因为一个Date类型将针​​对URL结构运行,在URL结构中,它无法分辨出Date中的“斜杠”与区分不同URL参数的“斜杠”之间的区别。如果您不想将日期转换为ISO-8601,并且不想将斜杠%编码为%2F或使用查询字符串等。

类似的事情应该起作用:

@GET
@Path("/dd/{sp}/{rpt}/{ter}/{month}/{day}/{year}/{grant}/{refresh}")
@Produces(MediaType.APPLICATION_JSON)
public List<ReportPeriodBean> getApprovals(@PathParam("sp") String sp,
        @PathParam("rpt") String rpt, 
        @PathParam("ter") String ter,
        @PathParam("month") int month,
        @PathParam("day") int day,
        @PathParam("year") int year,
        @PathParam("grant") String grant, 
        @PathParam("refresh") boolean refresh) {

    LocalDate date = LocalDate.of(year, month, day);
    // Now use the date however you like

}

这将使您可以使用似乎首选的语法来保留网址:

rs/Service/Store/Grantor/122/5801/DUE/10/30/2017/grantValue/true?request.preventCache=1562353357306