【问题标题】:Spring Boot - Why I cannot produce a String in RestController?Spring Boot - 为什么我不能在 RestController 中生成字符串?
【发布时间】:2021-01-10 10:44:06
【问题描述】:

在 Spring Boot 中,我正在配置服务器并且一切正常,除了我的 RestController。我不知道为什么:

(所以还不允许包含图片,所以这里是一个链接)

这就是小控制器类。请注意,我的 Intellij IDEA 中的方法名称 灰色 - 未使用。

package com.example.intermediate.controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class GrakaController {

    @GetMapping(value = "/graka", produces = "text/plain")
    @ResponseBody
    public String getSimpleString() {
        return "IT WORKED!";
    }
}

在 Postman 中,我尝试使用 http://localhost:8080/graka 获取字符串:我得到 200 返回码,但响应正文为空,无论我在 Postman 中选择哪种响应正文格式。但我应该得到“它成功了!”我想回来了。

我已经为此苦苦挣扎了几个小时。谁有什么想法?感谢您的每一个提示!

【问题讨论】:

  • 也许你没有重新编译你的代码?我尝试在 start.spring.io 上创建 Spring Boot 应用程序,仅使用 Web 依赖项并将您的方法复制粘贴到控制器中,然后在控制台 curl -X GET "localhost:8080/graka" 中执行,我得到了正确的响应。
  • 尝试在浏览器中打开网址
  • 你能把代码库推到某个地方,例如.GitHub 一会儿看看吗?
  • 在 Spring Boot 2.3.0 上运行良好,那么您使用的是什么版本的 Spring Boot?
  • 它适用于 Spring Boot 2.3.4。您将控制器放在与主应用程序不同的包中。它可能不会被 Spring 拾取来创建一个 bean(但由于您得到 200 的响应,这让我感到困惑)。你能分享一下你的主要应用程序类吗?

标签: spring spring-boot rest


【解决方案1】:

在 Spring 4 中,如果您的 Controller 使用 @RestController 注解,则不需要 @ResponseBody 注解。

使用 ResponseEntity。

@GetMapping("/graka")
public ResponseEntity<String> getSimpleString() {
    LOG.info("REST request get string value");
    return new ResponseEntity<>("{\"status\" : \"IT WORKED!\"}", HttpStatus.OK);
}

【讨论】:

  • ResponseEntity 只会使代码复杂化。在这种情况下,这是不必要的。
  • ResponseBody 不应破坏控制器。但这是正确的,它是 RestController 的可选。
  • 是的没错,还有其他选项可以满足我们的需求,它们会产生更简洁的代码。使用 ResponseEntity 对我来说似乎是最先进的
  • 你不需要ResponseEntity。仅当您需要控制响应代码、内容并想做更复杂的事情时才需要这样做。
【解决方案2】:

试试这个

    @GetMapping("/graka") 
    public String getSimpleString(){ 
    return "IT WORKED!"; 
     } 

【讨论】:

  • 我试过了,它不起作用。只显示一个空响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
  • 2018-03-14
  • 2017-09-14
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
相关资源
最近更新 更多