尝试从API获取JSON时,出现Java Spring错误404。在Postman中可以正常工作。

39 浏览
0 Comments

尝试从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日
0
0 Comments

一个快速的解决方法可以是将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 {
   ...
}

0
0 Comments

如果您在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注释的信息。

0