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

为什么Spring Boot对实体处理“404未找到”的方式不同?

范承教
2023-03-14

我想知道为什么Spring Boot处理404时没有发现不同。

无现有路径示例

我用curl在一个不存在的路径上提出请求:

$ curl -v -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" http://localhost:8080/no/endpoint | python -m json.tool
* Adding handle: conn: 0x69aa30
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x69aa30) send_pipe: 1, recv_pipe: 0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* About to connect() to localhost port 8080 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /no/endpoint HTTP/1.1
> User-Agent: curl/7.33.0
> Host: localhost:8080
> Accept: */*
> Authorization: Basic YWRtaW46YWRtaW4xMjM=
>
< HTTP/1.1 404
< Set-Cookie: JSESSIONID=62B5B02F18842F3BD46BCE57F2EAB017;path=/;HttpOnly
< X-Application-Context: Rechnungsservice Gateway:dev
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Mon, 20 Feb 2017 11:59:19 GMT
<
{ [data not shown]
100   115    0   115    0     0    569      0 --:--:-- --:--:-- --:--:--   614
* Connection #0 to host localhost left intact
{
    "error": "Not Found",
    "message": "No message available",
    "path": "/no/endpoint",
    "status": 404,
    "timestamp": 1487591959599
}

现在我请求一个不存在的实体的endpoint:

$ curl -v -H "Authorization: Basic YWRtaW46YWRtaW4xMjM=" http://localhost:8080/api/v1/settings/123 | python -m json.tool                                                                                                                    

* Adding handle: conn: 0x62aa40                                                                                       
* Adding handle: send: 0                                                                                              
* Adding handle: recv: 0                                                                                              
* Curl_addHandleToPipeline: length: 1                                                                                 
* - Conn 0 (0x62aa40) send_pipe: 1, recv_pipe: 0                                                                      
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                       
                                 Dload  Upload   Total   Spent    Left  Speed                                         
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* About to connect() to localhost port 8
080 (#0)                                                                                                              
*   Trying 127.0.0.1...                                                                                               
* Connected to localhost (127.0.0.1) port 8080 (#0)                                                                   
> GET /api/v1/settings/123 HTTP/1.1                                                                                   
> User-Agent: curl/7.33.0                                                                                             
> Host: localhost:8080                                                                                                
> Accept: */*                                                                                                         
> Authorization: Basic YWRtaW46YWRtaW4xMjM=                                                                           
>                                                                                                                     
< HTTP/1.1 404                                                                                                        
< Set-Cookie: JSESSIONID=BCD5ADDA48EB03C235E6573A36860F7D;path=/;HttpOnly                                             
< X-Application-Context: Rechnungsservice Gateway:dev                                                                 
< X-Content-Type-Options: nosniff                                                                                     
< X-XSS-Protection: 1; mode=block                                                                                     
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate                                                       
< Pragma: no-cache                                                                                                    
< Expires: 0                                                                                                          
< Content-Length: 0                                                                                                   
< Date: Mon, 20 Feb 2017 12:05:29 GMT                                                                                 
<                                                                                                                     
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0                                        
* Connection #0 to host localhost left intact                                                                         
No JSON object could be decoded    

所以我的问题是:为什么SpringBoot只在找不到实体的情况下发送一个简单的404状态?我希望看到一条好消息:在我的text/html错误页面上找不到实体或类似的内容,或者在json请求的情况下看到json错误对象。。。对于路径示例,它就像一个开箱即用的符咒。。。

我使用的是Spring Boot 1.4。3.释放。

更新:对不起,我忘了说我正在使用SpringDataREST。我在这里调试,直到找到以下代码片段:

class RepositoryEntityController ... {

public ResponseEntity<Resource<?>> getItemResource(...) {

Object domainObj = getItemResource(resourceInformation, id);

    if (domainObj == null) {
        return new ResponseEntity<Resource<?>>(HttpStatus.NOT_FOUND);
    }

}

在我看来,对不存在的单个实体的请求应该抛出一个“NotFoundException”,从而得到更好的响应。

共有1个答案

谭山
2023-03-14

第一个请求从未到达您的Spring应用程序,您的WAR没有部署在该位置,因此您从web服务器(可能是Tomcat)获得通用404消息。

 类似资料:
  • 我使用springboot和maryadb数据库进行训练。当我测试数据恢复时,我在邮递员中收到这样一条消息: 。我在复制粘贴中尝试了几个教程,我总是有相同的消息。我也会把控制台中的消息。提前谢谢你的帮助。 控制器 服务 回应的 模型 应用属性 安慰

  • 问题内容: 考虑以下Golang代码(也在Go Playground上): 此代码产生以下输出: 假设这不是一些奇怪的编译器错误,我很好奇为什么a)s的值在goroutine版本中的解释与常规func调用中的不同,并且b)为什么将其分配给循环内的局部变量起作用?两种情况。 问题答案: Go中的闭包在词法范围内。这意味着闭包内从“外部”范围引用的任何变量都不是副本,而是实际上是引用。一环竟重复使用相

  • 问题内容: 我创建了一个整数列表,并试图返回特定值的索引。该数组是3,8,2,5,1,4,7,6并且我想返回indexOf(3),应该为0。 导入java.util。*后,我在Eclipse Java Scrapbook中尝试了以下操作: 我也尝试过: 两者都返回-1。为什么?如何使它按预期工作? 问题答案: 它不是为了使它起作用。

  • 我有几个插件有问题 Image_Picker:^0.6.2+3,位置:^2.3.5,... 我真的扑得干干净净,什么都没变 Android设备:SM-N900 和我的代码:

  • 我试图使一个API工作在springstart但是当我输入请求:http://localhost:8080/employee/all我得到这个结果: 它是一个经典的服务,包含一个模型、一个服务、一个存储库、一个映射器和一个异常(如果没有员工),使用的数据库是sql中的实体,如下所示 服务: 仓库 模型 制图员 例外 波姆。xml

  • 问题内容: 我正在使用Hibernate和JPA。我有一个实体,它引用了: 但是在我的数据库中,有些客户没有父母,因此将设置为。我在测试班级时遇到的异常是: 有没有一种方法来设置,以当id为? 问题答案: 尝试这个