Java 在rest服务中修改GET的url路径

Java 在rest服务中修改GET的url路径,java,spring,rest,Java,Spring,Rest,我实现了一个简单的rest GET服务,我想修改该服务的ulr 现在的url是: 我想添加一个过滤器,并在日期中添加一些括号[] 这样:?过滤器[日期]=2019-07-30T11:35:42 这是我的Get服务,在值中我有“types/id”,但我不知道如何为请求的参数添加过滤器和括号 @RequestMapping(value = "types/id", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON

我实现了一个简单的rest GET服务,我想修改该服务的ulr

现在的url是:

我想添加一个过滤器,并在日期中添加一些括号[]

这样:?过滤器[日期]=2019-07-30T11:35:42

这是我的Get服务,在值中我有“types/id”,但我不知道如何为请求的参数添加过滤器和括号

    @RequestMapping(value = "types/id", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ResponseEntity<?> getTicketids( @RequestParam(required = false) String date)
    {
        ...
    }
@RequestMapping(value=“types/id”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
@应答器
公共响应性getTicketids(@RequestParam(required=false)字符串日期)
{
...
}

如果能给我一些建议,比如我可以改变什么或者我应该读什么,我将不胜感激

为什么要在RequestParam中添加方括号?是因为您希望使用多种过滤器,并希望区分它们吗?在这种情况下,您可以添加两个请求参数-

?filterName=date&filterValue=2019-07-30T11:35:42
另外,确保这些值是url编码的,以避免字符串的任何部分使url无效


希望,这会有所帮助。

我假设您正在使用Spring定义RestController。通常,参数的工作方式如下:

public ResponseEntity<?> getTicketids( @RequestParam(name = "filterDate", required = false) String date)
    {
        ...
    }
@RequestMapping(value = "types/id", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public void receiveArrayOfValues(@RequestParam String[] filters) 
{
  // Handle values here
}
public ResponseEntity getticketId(@RequestParam(name=“filterDate”,required=false)字符串日期)
{
...
}
此代码允许请求


但是,方括号是,因此您可能需要重新考虑该特定方法。

我建议您通过如下方式传递所需过滤器列表,而不是在URL中使用方括号:

public ResponseEntity<?> getTicketids( @RequestParam(name = "filterDate", required = false) String date)
    {
        ...
    }
@RequestMapping(value = "types/id", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public void receiveArrayOfValues(@RequestParam String[] filters) 
{
  // Handle values here
}

并按如下方式更改控制器:

public ResponseEntity<?> getTicketids( @RequestParam(name = "filterDate", required = false) String date)
    {
        ...
    }
@RequestMapping(value = "types/id", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public void receiveArrayOfValues(@RequestParam String[] filters) 
{
  // Handle values here
}

你能解释一下为什么这样做吗?你的问题是你想使用不同的过滤器而不是指定名称?我需要这样做,我没有太多的经验如何构建ulrsI需要添加括号,我没有太多的经验来构建这样的URL你可以使用“名称”设置参数的名称@RequestParam的属性,但如果设置方括号,则会出现异常,如-java.lang.IllegalArgumentException:在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义如果您想使用方括号,这是您可以做的-设置“name”属性=“filter[date]”,然后在使api调用url编码第三个括号时,如:?filter%5Bdate%5d我使用的是Spring,但此名称标记在RequestParam中不起作用。我得到一个错误:注释类型的属性名未定义RequestParam@dernor00你使用的是旧版本吗?尝试
value
而不是
name
是的,我使用的是旧版本。我试试看,谢谢。