尝试从API获取JSON时,出现Java Spring错误404。在Postman中可以正常工作。
尝试从API获取JSON时,出现Java Spring错误404。在Postman中可以正常工作。
我正在尝试在头部使用API密钥从API获取JSON对象。当我在Postman中测试时,它完全有效,但当我在Spring应用程序中尝试时,我遇到了错误:
发生了意外错误(类型=未找到,状态=404)。没有消息可用。
API密钥和URL
已更改为虚拟数据。
@RequestMapping(value = "/apitest", method = RequestMethod.GET, headers ="APIKey=12345") public @ResponseBody void testingAPI() throws ParseException { final RestTemplate restTemplate = new RestTemplate(); final String response = restTemplate.getForObject("url", String.class); System.out.println(response); }
admin 更改状态以发布 2023年5月22日
一个快速的解决方法可以是将void更改为一个类,如:
@RequestMapping(value = "/apitest", method = RequestMethod.GET, headers ="APIKey=12345") @ResponseBody public XXXResponse testingAPI() throws ParseException { ... return new XXXRepsonse(); }
或:
@RequestMapping(value = "/apitest", method = RequestMethod.GET, headers ="APIKey=12345") public void testingAPI() throws ParseException { ... }
如果您在Postman中测试API并且它完美地工作,但在您的应用程序中却不起作用,这意味着您的方法映射不正确或未正确调用。
但是,从您的评论中可以看出,如果您没有API密钥,同样的配置是有效的,这意味着您的标题映射不正确,在这种情况下,我建议使用@RequestHeader
注释来处理您的API密钥。
您的方法映射将如下所示:
@RequestMapping(value = "/apitest", method = RequestMethod.GET) public @ResponseBody void testingAPI(@RequestHeader("APIKey") String apiKey) throws ParseException { final RestTemplate restTemplate = new RestTemplate(); final String response = restTemplate.getForObject("url", String.class); System.out.println(response); }
如果您想将12345
作为您的API密钥参数的默认值,您可以编写:
@RequestMapping(value = "/apitest", method = RequestMethod.GET) public @ResponseBody void testingAPI(@RequestHeader(name = "APIKey", defaultValue = "12345") String apiKey) throws ParseException {
您可以查看如何在Spring REST控制器中读取HTTP标头教程进行深入阅读有关@RequestHeader
注释的信息。