Spring MVC - 具有特定url参数的错误代码406

时间:2016-11-11 14:35:26

标签: spring rest spring-mvc http-status-code-406

我使用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,连接; Q = 0.4
  • 缓存控制:无缓存
  • 曲奇:_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,与Gecko一样)Chrome / 54.0.2840.71 Safari / 537.36

我得到一个正确的JSON对象作为响应。

但是当我更改参数&#34; roomId&#34;从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,连接; Q = 0.4
  • 缓存控制:无缓存
  • 曲奇:_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,与Gecko一样)Chrome / 54.0.2840.71 Safari / 537.36

我收到错误代码 406 - Inacceptable

我在项目的各处都使用这种请求,我从来没有遇到过这种问题。参数&#34; roomId&#34;仍然是一个正常的整数值。它如何产生Spring Mvc的问题?标题和运行代码仍然完全相同。

当我在&#34; findBySiteAndRoom&#34;的第一行放置一个断点时方法,在第一种情况下它到达了这一点。但在第二种情况下,它会在到达断点之前返回406错误代码。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我发现了一种修复方法。我创建了一个扩展WebMvcConfigurerAdapter的Spring配置,并且我覆盖了“configureContentNegotiation”方法,如下所示:

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

使用此参数,它可以完美地工作。

但我仍然不明白什么可以解释,房间ID I1.A.122它的工作原理和房间ID I1.A.123它不起作用。