Мне нужно реализовать error controller
, который будет вести себя определенным образом только для одного случая - когда он пытается отобразить whitelabel error page
. В других случаях он должен вести себя как обычный BasicErrorController
, который использует Spring Boot.
Мой текущий контроллер, кажется, принимает на себя каждый запрос и даже вызывает перенаправление при базовой ошибке 401, несмотря на наличие restexceptionhandler
.
@Controller
@RequestMapping("/error")
public class ErrorPageController implements ErrorController {
private static final String LOCALHOST_SERVER_NAME = "localhost";
private static final Logger LOGGER = LoggerFactory.getLogger(ErrorPageController.class);
private static final String REDIRECT_FORMAT = "redirect:%s://%s%s";
private static final String LOCALHOST_REDIRECT_FORMAT = "redirect:%s://%s:%d%s";
@Value("${server.error.page.internalErrorPage}")
private String internalErrorPage;
@GetMapping(produces = "text/html")
public String handleGetError(HttpServletRequest request) {
return handleError(request);
}
@PutMapping(produces = "text/html")
public String handlePutError(HttpServletRequest request) {
return handleError(request);
}
@PostMapping(produces = "text/html")
public String handlePostError(HttpServletRequest request) {
return handleError(request);
}
@DeleteMapping(produces = "text/html")
public String handleDeleteError(HttpServletRequest request) {
return handleError(request);
}
private String handleError(HttpServletRequest request) {
String redirectUrl;
if (LOCALHOST_SERVER_NAME.equals(request.getServerName())) {
redirectUrl = String.format(LOCALHOST_REDIRECT_FORMAT, request.getScheme(), request.getServerName(),
request.getServerPort(), internalErrorPage);
} else {
redirectUrl = String.format(REDIRECT_FORMAT, request.getScheme(), request.getServerName(),
internalErrorPage);
}
return redirectUrl;
}
@Override
public String getErrorPath() {
return "/error";
}
}
Однако, когда я пытаюсь расширить BasicErrorController
, и это заставляет меня определить конструктор
public ErrorPageController(ErrorAttributes errorAttributes, ErrorProperties errorProperties) {
super(errorAttributes, errorProperties);
}
Кажется, он не может создать экземпляр объекта со свойствами ошибки.
Parameter 1 of constructor in com.xxx.handler.ErrorPageController required a bean of type 'org.springframework.boot.autoconfigure.web.ErrorProperties'
В чем проблема? То, что я хочу, это просто перенаправление, когда запрос не прошел и он пришел с /api/oauth
URL, оставив другие работающие как есть.