화이트 라벨 오류 페이지를 제거하려고하는데 “/ error”에 대한 컨트롤러 매핑을 만들었습니다.
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
그러나 지금이 오류가 발생합니다.
Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'basicErrorController' bean method
public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletR equest)
to {[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'indexController' bean method
내가 잘못하고 있는지 모르겠다. 조언을 부탁드립니다.
편집하다:
error.whitelabel.enabled=false
application.properties 파일에 이미 추가
되었지만 여전히 동일한 오류가 발생합니다.
답변
코드를 다음과 같이 변경해야합니다.
@RestController
public class IndexController implements ErrorController{
private static final String PATH = "/error";
@RequestMapping(value = PATH)
public String error() {
return "Error handling";
}
@Override
public String getErrorPath() {
return PATH;
}
}
의 BasicErrorController
구현을 지정 하지 않으면 Spring Boot가 자동으로 Spring Bean 으로 등록하기 때문에 코드가 작동하지 않았습니다 ErrorController
.
그 사실을 보려면 ErrorMvcAutoConfiguration.basicErrorController
여기로 이동 하십시오 .
답변
더 “JSONish”응답 페이지를 원하면 다음과 같이 해보십시오.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@RestController
@RequestMapping("/error")
public class SimpleErrorController implements ErrorController {
private final ErrorAttributes errorAttributes;
@Autowired
public SimpleErrorController(ErrorAttributes errorAttributes) {
Assert.notNull(errorAttributes, "ErrorAttributes must not be null");
this.errorAttributes = errorAttributes;
}
@Override
public String getErrorPath() {
return "/error";
}
@RequestMapping
public Map<String, Object> error(HttpServletRequest aRequest){
Map<String, Object> body = getErrorAttributes(aRequest,getTraceParameter(aRequest));
String trace = (String) body.get("trace");
if(trace != null){
String[] lines = trace.split("\n\t");
body.put("trace", lines);
}
return body;
}
private boolean getTraceParameter(HttpServletRequest request) {
String parameter = request.getParameter("trace");
if (parameter == null) {
return false;
}
return !"false".equals(parameter.toLowerCase());
}
private Map<String, Object> getErrorAttributes(HttpServletRequest aRequest, boolean includeStackTrace) {
RequestAttributes requestAttributes = new ServletRequestAttributes(aRequest);
return errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace);
}
}
답변
스프링 부트 문서 ‘잘못된'(그 이후 수정되었습니다) :
전원을 끄려면 error.whitelabel.enabled = false를 설정할 수 있습니다
해야한다
전원을 끄려면 server.error.whitelabel.enabled = false를 설정할 수 있습니다
답변
다음을 지정하여 완전히 제거 할 수 있습니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
...
@Configuration
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
public static MainApp { ... }
그러나 그렇게하면 서블릿 컨테이너의 화이트 라벨 페이지가 대신 나타날 수 있습니다.
편집 : 다른 방법은 application.yaml을 사용하는 것입니다. 값을 입력하십시오.
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
Spring Boot <2.0의 경우 클래스는 package에 org.springframework.boot.autoconfigure.web
있습니다.
답변
수동 여기에는 사용자가 설정해야한다는라고 server.error.whitelabel.enabled
하는 false
표준 오류 페이지를 해제 할 수 있습니다. 어쩌면 그것은 당신이 원하는 것입니까?
그건 그렇고 / 오류 매핑을 추가 한 후 동일한 오류가 발생합니다.
답변
Spring Boot> 1.4.x를 사용하면 다음을 수행 할 수 있습니다.
@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})
public class MyApi {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
그러나 예외의 경우 서블릿 컨테이너는 자체 오류 페이지를 표시합니다.
답변
이것은 스프링 부트 버전에 따라 다릅니다.
경우 SpringBootVersion는 <= 1.2
후 사용error.whitelabel.enabled = false
때 SpringBootVersion > = 1.3
다음 사용server.error.whitelabel.enabled = false