当前位置: 首页 > 知识库问答 >
问题:

Spring引导Restendpoint返回空与提取请求

韦繁
2023-03-14

我已经在JavaSpringBoot中创建了Restendpoint。当我通过邮递员请求时,它会返回适当的响应。但当我使用react fetch时,若返回的是Json,它不会在浏览器中显示任何响应。

Spring启动控制器:

@RestController
@RequestMapping(path = "/v1/test")
@AllArgsConstructor(onConstructor_ = {@Autowired})
public class TestController {
    ...
}

下面的endpoint正在返回适当的响应。

  @GetMapping(value = "/helloWorld", produces = MediaType.APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.OK)
  public String getHelloWorld() {
    return "Hello, World1!";
  }

但当我尝试点击endpoint下方时,当我发出fetch请求时,它返回null。但当我通过邮递员点击它时,它会返回适当的响应。

  @GetMapping(value = "/testEndpoint", produces = MediaType.APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.OK)
  public String returnTestResponse() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("results", "value2");
    return "{\"a\":1, \"b\":\"foo\"}";
  }

还尝试返回POJO对象。但仍然没有回应。

  @GetMapping(value = "/testModel", produces = MediaType.APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.OK)
  public SearchResultsModel testModel() {
    this.myService.getSearchResult();
  }

响应提取调用:

await fetch(ALL_ARTICLES_ENDPOINT, {
    mode: 'no-cors', 
    method: 'GET',
    redirect: 'follow',
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
    },
  }).then(response => {
    console.log(response);
  })
  .then(data => {
    console.log('Success:', data);
  }).catch((error) => {
    console.error('Error:', error);
  });

共有2个答案

曹育
2023-03-14

问题是由于在获取请求中添加模式:“no cors”选项而导致的。这个选项帮助我摆脱了cors错误,但这意味着作为回报,我将无法在chrome中看到正文和标题。

为了解决这个问题,我删除了模式:“无cors”,并在我的Spring Boot控制器上添加了@CrossOrigin注释。

姬慎之
2023-03-14

邮递员有两个隐藏的邮件头,这些邮件头与所有请求一起发送。选中“隐藏自动生成的标题”

react调用中缺少的是带有application/json值的Accept

编辑:

刚才看到您将字符串作为json返回。您需要将它包装在POJO对象中,并在returnTestResponse类中返回它

第二次编辑:

这会奏效的。尝试实现您的POJO

@GetMapping(value = "/testEndpoint", produces = MediaType.APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.OK)
  public YourObject returnTestResponse() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("results", "value2");
    return new YourObject(map);
  }
 类似资料:
  • 我正在尝试使用开源用户管理服务,比如KeyClope。构建一个angularJs应用程序,该应用程序将向由KeyClope保护的RESTendpoint发送HTTP请求。我在后端使用spring boot。我能够调用endpoint并得到结果,这应该是不可能的,因为它会阻止来自未经授权来源的请求。 这是我遵循的两个链接 带角和Spring靴的钥匙斗篷 2.Github链接到KeyClope示例 由

  • 我必须构建一个RESTendpoint,它在内部调用一些RESTendpoint(商业机密),并进行一些定制,并给出特定于用户的响应。我在spring boot框架内使用的endpoint(商业机密),支持HTTP和https。因为我的框架默认支持HTTP协议。 下面是endpoint示例: http://localhost:8081/hadoop-calendpoint控制器/getCustom

  • 问题内容: 我在用JavaScript抓取API挣扎。当我尝试通过获取将某些内容发布到服务器时,请求正文为空数组。但是,当我使用Postman时,它可以工作…这是我在NodeJS中的服务器代码: 这是我的客户: 问题是在服务器端,req.body为空。有人能帮我吗?谢谢 ! 问题答案: 问题是 从文档中 … 防止该方法成为HEAD,GET或POST之外的任何其他内容, 并且 阻止 标头成为 简单标

  • 我为此使用了一个服务类,但为了最小的可重复示例而删除了它。目前findAll()正在返回一个空数组,而它应该从h2返回一个带有员工实体json的数组。我仍然不清楚Spring如何将数据处理到h2数据库中,所以我想这可能是我的问题的根源。 控制器: 存储库: 实体: 数据sql: schema.sql:

  • 我正在尝试对远程服务器进行api调用,最初,我遇到以下错误:

  • 按预期列出了这些组: 和按预期工作: 但是,和都返回和。 我想要的探测记录在自动配置的HealthIndicator列表中。 在https://spring.io/blog/2020/03/25/liveness-and-readid-probes-with-spring-boot中也介绍了该特性。 我尝试了的几个拼写,插入了(在博客文章中),但没有效果。 这里有一个相关的答案,但它并不直接解决我