Java 在rest服务中修改GET的url路径
我实现了一个简单的rest GET服务,我想修改该服务的ulr 现在的url是: 我想添加一个过滤器,并在日期中添加一些括号[] 这样:?过滤器[日期]=2019-07-30T11:35:42 这是我的Get服务,在值中我有“types/id”,但我不知道如何为请求的参数添加过滤器和括号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
@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
是的,我使用的是旧版本。我试试看,谢谢。