【发布时间】:2016-11-11 14:35:25
【问题描述】:
我使用 REST API 开发了一个 Spring MVC 应用程序。
我在控制器中有这个方法:
@RequestMapping(value="/roomId/{roomId}",produces = "application/json")
public List<DayStatisticDto> findBySiteAndRoom(@PathVariable("roomId") String roomId, @RequestParam("timestamp") String timestamp, @RequestParam("pageSize") Integer pageSize) throws ParseException {
List<DayStatisticDto> dayStatisticDtos = dayStatisticService.latestDailyStatisticsForRoom(getCurrentUserSiteCode(), roomId, pageSize, timestamp, false);
return dayStatisticDtos;
}
当我提出这个获取请求时:
有了这个请求参数:
- 接受:应用程序/json
- 接受编码:gzip、deflate、sdch、br
- 接受语言:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
- 缓存控制:无缓存
- Cookie:_ga=GA1.1.486025197.1475764350;JSESSIONID=6716A5824088BC0F46A6B74D5FB25A3E
- 主机:本地主机:8080
- User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
我得到一个正确的 JSON 对象作为响应。
但是当我将参数“roomId”从 I1.A.122 更改为 I1.A.123 时:
有了这个请求参数:
- 接受:应用程序/json
- 接受编码:gzip、deflate、sdch、br
- 接受语言:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
- 缓存控制:无缓存
- Cookie:_ga=GA1.1.486025197.1475764350; JSESSIONID=6716A5824088BC0F46A6B74D5FB25A3E
- 主机:本地主机:8080
- User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
我收到错误代码406 - 不可接受
我在项目中到处都使用这种请求,我从来没有遇到过这种问题。参数“roomId”仍然是一个普通的整数值。它如何与 Spring Mvc 产生问题?头文件和运行代码仍然完全相同。
当我在“findBySiteAndRoom”方法的第一行放置一个断点时,在第一种情况下它到达了该点。但是在第二种情况下,它在到达断点之前返回406错误代码。
提前感谢您的帮助。
【问题讨论】:
-
当我在 requestparam 而不是路径变量中传递房间 ID 时,它与 roomId I1.A.123 一起使用:localhost:8080/api/activities/… 当我在 roomId 之后添加一个额外的单词时,它与房间一起使用ID I1.A.213:localhost:8080/api/activities/room/I1.A.123/… 我们该如何解释呢?它是 Spring MVC 中的错误吗?
-
当我在 roomId 值之后添加一个“/”时,它也可以工作:localhost:8080/api/activities/roomId/I1.A.123/…
-
你的路径映射去@RequestMapping(value="/roomId/{roomId}",produces = "application/json") 或@RequestMapping(value="/room/{roomId}",produces =“应用程序/json”)? (房间 ID 与房间)
-
路径映射为@RequestMapping(value="/roomId/{roomId}",produces = "application/json")
标签: spring rest spring-mvc http-status-code-406