【问题标题】:When @ResponseBody is removed from the controller, getting 404 not found error message [duplicate]从控制器中删除 @ResponseBody 时,收到 404 not found 错误消息 [重复]
【发布时间】:2019-10-27 17:12:27
【问题描述】:

我有一个 Spring Boot 应用程序,其中我正在创建一个带有 @Controller 注释的控制器,当我尝试使用它显示给我 404, "not found" 的 url 访问资源时。但是只要我在类级别或方法级别添加注释@ResponseBody,它就会给我想要的输出。我想在这里了解@Responsebody的作用为什么会影响url识别。据我所知@ResponseBody 处理回复。

当我有如下代码时 -

@Controller
@RequestMapping(value = "test")

public class TestController {

    @RequestMapping(value = "/m1")
    public @ResponseBody String testMethod(){
        return "Hello First Application";
    }
}

它给了我一个准确的输出为Hello First Application

当我从方法 testMethod() 中删除 @ResponseBody 时,它会给我以下输出。

{
    "timestamp": "2019-06-13T06:36:14.510+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/test/m1"
}

我期待一个字符串作为响应。

【问题讨论】:

  • 如果没有@ResponseBodyString 被解释为要呈现的网页的名称,它按原样使用。
  • 这个错误似乎是模棱两可的,我认为作为响应应该有不同的错误消息,以便开发人员能够理解。乍一看,似乎没有为此 url 指定映射。在阅读了许多文章后,我很清楚。我在 Spring Boot 应用程序中仍然面临一些问题,以获取我将修复的正确视图。但我认为错误信息应该比当前的更慷慨。
  • 错误有什么问题,视图也是一个 URL,因此 404 是完全可以接受的。找不到该视图,如果您检查日志(您可能需要启用调试),您将看到这一点。
  • 是的,我刚刚设置启用调试,现在很清楚发生了什么。谢谢@M.Deinum

标签: java spring spring-boot


【解决方案1】:

这取决于您的视图分辨率。只需验证您为项目指定的默认视图分辨率。

如果没有 ResponseBody,spring 会尝试解析您的视图匹配字符串“hello ...”,但该字符串不存在。

如果使用了ResponseBody,则将返回序列化并写入HTTP响应 参考https://www.baeldung.com/spring-request-response-body

【讨论】:

    【解决方案2】:

    此链接可能会解释您的需求: https://www.baeldung.com/spring-request-response-body

    基本上,注解告诉控制器对象的格式是正确的。 @Controller 通常用于返回视图,@RestController 用于 JSON,不再需要@ResponseBody

    【讨论】:

    • 感谢 Claudiu 的链接,但它仅指定 @Responsebody 给出响应的 JSON 表示,但 404 表示未找到请求的 URL。问题仍然存在,我们正在改变响应的类型,它应该如何影响 URL 识别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多