0

我使用 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;
}

当我提出这个获取请求时

http://localhost:8080/api/activities/roomId/I1.A.122?timestamp=2016-11-11T12:02:34.421+0100&pageSize=10

使用此请求参数:

  • 接受:应用程序/json
  • 接受编码:gzip、deflate、sdch、br
  • 接受语言:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
  • 缓存控制:无缓存
  • 饼干:_ga=GA1.1.486025197.1475764350;JSESSIONID=6716A5824088BC0F46A6B74D5FB25A3E
  • 主机:本地主机:8080
  • 用户代理: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 时:

http://localhost:8080/api/activities/roomId/I1.A.123?timestamp=2016-11-11T12:02:34.421+0100&pageSize=10

使用此请求参数:

  • 接受:应用程序/json
  • 接受编码:gzip、deflate、sdch、br
  • 接受语言:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
  • 缓存控制:无缓存
  • 饼干:_ga=GA1.1.486025197.1475764350;JSESSIONID=6716A5824088BC0F46A6B74D5FB25A3E
  • 主机:本地主机:8080
  • 用户代理: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 错误代码。

预先感谢您的帮助。

4

1 回答 1

0

我找到了一种解决方法。我创建了一个扩展 WebMvcConfigurerAdapter 的 Spring 配置,并像这样覆盖了“configureContentNegotiation”方法:

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.favorPathExtension(false);
}

使用此参数,它可以完美运行。

但是我仍然不明白什么可以解释房间 ID I1.A.122 它可以工作,而房间 ID I1.A.123 它不能工作。

于 2016-11-14T08:32:00.103 回答