CustomErrorController.java
package edu.ucsb.cs156.courses.controllers;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.LocalDateTime;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class CustomErrorController implements ErrorController {
@RequestMapping("/error")
public String handleError(HttpServletRequest request, Model model) {
Object statusObj = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
int statusCode = 500;
if (statusObj != null) {
statusCode = Integer.parseInt(statusObj.toString());
}
HttpStatus httpStatus = HttpStatus.resolve(statusCode);
String error = httpStatus == null ? "Unknown Error" : httpStatus.getReasonPhrase();
Object messageObj = request.getAttribute(RequestDispatcher.ERROR_MESSAGE);
String message = messageObj == null ? "" : messageObj.toString();
Object pathObj = request.getAttribute(RequestDispatcher.ERROR_REQUEST_URI);
String path = pathObj == null ? "" : pathObj.toString();
Throwable throwable = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);
String exceptionMessage = "";
String stackTrace = "";
if (throwable != null) {
exceptionMessage = throwable.getMessage();
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
throwable.printStackTrace(pw);
stackTrace = sw.toString();
}
model.addAttribute("status", statusCode);
model.addAttribute("error", error);
model.addAttribute("message", message);
model.addAttribute("exceptionMessage", exceptionMessage);
model.addAttribute("stackTrace", stackTrace);
model.addAttribute("timestamp", LocalDateTime.now());
model.addAttribute("path", path);
return "custom-error";
}
}