В моем весеннем загрузочном проекте я реализовал класс CustomErrorController
, который реализует интерфейс ErrorController
следующим образом:
@Controller
public class CustomErrorController implements ErrorController{
@RequestMapping("/error")
@ResponseBody
public String handleError(HttpServletRequest request) {
System.out.println("Request URL " + request.getRequestURL());
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
if(statusCode.equals(404)) {
return String.format("<html><body><h2>Pagina non trovata</h2><div>Status code: <b>%s</b></div>"
+ "<div>Exception Message: <b>La pagina cercata non esiste.</b></div><body></html>",
statusCode, exception==null? "N/A": exception.getMessage());
} else if (statusCode.equals(505)) {
return String.format("<html><body><h2>Istanza non trovata</h2><div>Status code: <b>%s</b></div>"
+ "<div>Exception Message: <b>L'istanza non è presente nel database</b></div><body></html>",
statusCode, exception==null? "N/A": exception.getMessage());
} else {
return String.format("<html><body><h2>Errore</h2><div>Status code: <b>%s</b></div>"
+ "<div>Exception Message: <b>%s</b></div><body></html>",
statusCode, exception==null? "N/A": exception.getMessage());
}
}
@Override
public String getErrorPath() {
return "/error";
}
}
Теперь я хотел бы выдавать разные сообщения не только на основе кода состояния, но также в зависимости от того, к какой конечной точке пользователь выполнил запрос.Я пытался использовать метод request.getRequestURL()
, но он возвращает http://localhost:9090/error
.Вместо этого, как я могу получить строку "source URL"?Чтобы различать, скажем, если была сгенерирована ошибка по адресу http://localhost:9090/objects
или http://localhost:9090/otherobjects
.