[spring] 스프링 부트 제거 Whitelabel 오류 페이지

화이트 라벨 오류 페이지를 제거하려고하는데 “/ 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