Spring Boot 버전 2.1.2를 사용하고 있습니다. errorAttributes.getErrorAttributes()
서명이 작동하지 않습니다 (아 코헨의 답변). JSON 유형의 응답을 원했기 때문에 약간 파고이 방법이 필요한 것을 정확하게 수행했습니다.
이 글과 블로그 게시물 에서 대부분의 정보를 얻었 습니다. .
먼저 CustomErrorController
Spring에서 오류를 매핑 할 것을 만들었습니다 .
package com.example.error;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.WebRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@RestController
public class CustomErrorController implements ErrorController {
private static final String PATH = "error";
@Value("${debug}")
private boolean debug;
@Autowired
private ErrorAttributes errorAttributes;
@RequestMapping(PATH)
@ResponseBody
public CustomHttpErrorResponse error(WebRequest request, HttpServletResponse response) {
return new CustomHttpErrorResponse(response.getStatus(), getErrorAttributes(request));
}
public void setErrorAttributes(ErrorAttributes errorAttributes) {
this.errorAttributes = errorAttributes;
}
@Override
public String getErrorPath() {
return PATH;
}
private Map<String, Object> getErrorAttributes(WebRequest request) {
Map<String, Object> map = new HashMap<>();
map.putAll(this.errorAttributes.getErrorAttributes(request, this.debug));
return map;
}
}
둘째, CustomHttpErrorResponse
오류를 JSON으로 반환 하는 클래스를 만들었습니다 .
package com.example.error;
import java.util.Map;
public class CustomHttpErrorResponse {
private Integer status;
private String path;
private String errorMessage;
private String timeStamp;
private String trace;
public CustomHttpErrorResponse(int status, Map<String, Object> errorAttributes) {
this.setStatus(status);
this.setPath((String) errorAttributes.get("path"));
this.setErrorMessage((String) errorAttributes.get("message"));
this.setTimeStamp(errorAttributes.get("timestamp").toString());
this.setTrace((String) errorAttributes.get("trace"));
}
// getters and setters
}
마지막으로 application.properties
파일 에서 Whitelabel을 해제해야했습니다 .
server.error.whitelabel.enabled=false
xml
요청 / 응답 에도 작동합니다 . 그러나 나는 그것을 테스트하지 않았습니다. RESTful API를 작성하고 JSON을 반환하기를 원했기 때문에 내가 원하는 것을 정확하게 수행했습니다.