HttpMediaTypeNotAcceptableException:找不到可接受的表示形式

时间:2019-09-28 07:29:55

标签: java rest spring-boot spring-mvc controller

我有以下控制器类:

@RestController
@RequestMapping(value = "/query")
public class QueryController {

    @Autowired
    private QueryService queryService;

    // this post API works perfectly fine
    @PostMapping(value = "/submit")
    public void submitQuery(@Valid @RequestBody Query query) {
        queryService.submit(query);
    }

    // this API is throwing the error
    @GetMapping(value = "/find/email/{email:.+}")
    public List<Query> fetchByEmail(@PathVariable("email") String email) {
        return queryService.fetchByEmail(email);
    }
}

我正在发送以下cURL请求:

  

卷曲-X GET http://localhost:8562/query/find/email/abc@gmail.com -H'内容类型:application / json'

在调试模式下,我可以看到请求已通过我在请求中发送的预期emailId到达控制器。 DAO层搜索也发生了,它返回了1条记录,但是API引发了以下错误:

{
    "timestamp": 1569655451392,
    "status": 406,
    "error": "Not Acceptable",
    "message": "Could not find acceptable representation",
    "path": "/query/find/email/abc@gmail.com"
}

有人可以帮忙吗?

注意:我正在使用springBootVersion ='2.0.5.RELEASE'

编辑:GET API是引发错误的API。没有点号(。)的任何请求都可以正常工作。以下请求不会引发任何错误:

  

卷曲-X GET http://localhost:8562/query/find/email/abc@gmail -H'内容类型:application / json'

编辑2:附加以下调试屏幕截图:

enter image description here

从这一点来看,如果我运行代码,则会出现以下错误:

  

{“时间戳”:1569657676774,“状态”:406,“错误”:“不可接受”,“消息”:“找不到可接受的表示形式”,“路径”:“ / query / find / email / rishi2893 @ gmail.com“}

1 个答案:

答案 0 :(得分:0)

HTTP 406不可接受表示服务器无法以客户端可以理解的格式产生响应。

您必须发送Accept标头,以便将客户端可以理解的可接受格式通知服务器,并发送给ensure that your server can produce such formats

curl -H "Accept: application/json" ...

除上述内容外,当在请求中发送Content-Type标头时,它指定从 client 发送的请求的媒体类型。在POST / PUT请求中应使用Content-Type标头。在GET请求中没有意义,因为您不应在此类请求中包含正文。