2017-02-20 1 views
1

스프링 부트가 404 Not Found를 다르게 처리하는 이유가 궁금합니다.엔티티에 대한 스프링 부트 처리가 "404 찾을 수 없음"다른 이유는 무엇입니까?

없음 기존 경로 예를

나는 컬을 가진 없음 기존 경로에 요청합니다

$ 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 
} 

같은 작업 브라우저가 : enter image description here

을 그리고 지금은 요청 존재하지 않는 실체를위한 종점 :

브라우저에서 6,
$ 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  

같은 동작 : enter image description here

그래서 내 질문 : 왜 봄 부팅 만 찾을 수없는 기업의 경우 간단한 (404 개) 상태를 보내는? 좋은 메시지를보고 싶습니다 : 엔터티를 찾을 수 없거나 json 요청의 경우 텍스트/HTML 또는 JSON 오류 개체에 대한 내 오류 페이지에서 이와 같은 ... 경로 예제의 경우 상자 ...

나는 봄 부팅 1.4.3.RELEASE를 사용하고 있습니다.

업데이트 : 죄송합니다. 스프링 데이터 나머지를 사용하고 있다는 것을 잊어 버렸습니다. 제 생각에는 더 좋은 반응을 선도하는 "NotFoundException"을 던져해야 존재하지 않는 하나의 엔티티에 요청을

class RepositoryEntityController ... { 

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

Object domainObj = getItemResource(resourceInformation, id); 

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

} 

: 그리고 여기가 내가이 코드를 발견 된 unti 디버깅.

답변

2

첫 번째 요청은 Spring 애플리케이션에 도달하지 않으며 WAR는 해당 위치에 배포되지 않으므로 대신 웹 서버 (Tomcat)에서 일반 404 메시지를받습니다.

관련 문제