Ism*_*iel 12 java spring spring-mvc spring-boot
几个小时我试图在Spring Boot/MVC中创建一个CUSTOM全局错误处理程序.我读过很多文章而且没什么......:/请.帮我.
那是我的错误类:
我尝试创建一个这样的类
@Controller
public class ErrorPagesController {
@RequestMapping("/404")
@ResponseStatus(HttpStatus.NOT_FOUND)
public String notFound() {
return "/error/404";
}
@RequestMapping("/403")
@ResponseStatus(HttpStatus.FORBIDDEN)
public String forbidden() {
return "/error/403";
}
@RequestMapping("/500")
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String internalServerError() {
return "/error/500";
}
}
Run Code Online (Sandbox Code Playgroud)
****问题已解决****我用这种方式:
`
@Configuration
public class ErrorConfig implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
}
}
Run Code Online (Sandbox Code Playgroud)
`
@Arash的附加内容
您可以添加一个BaseController
可以扩展的新类,它处理从异常到的转换http response
.
import com.alexfrndz.pojo.ErrorResponse;
import com.alexfrndz.pojo.Error;
import com.alexfrndz.pojo.exceptions.NotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.persistence.NoResultException;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Slf4j
public class BaseController {
@ExceptionHandler(NoResultException.class)
public ResponseEntity<Exception> handleNoResultException(
NoResultException nre) {
log.error("> handleNoResultException");
log.error("- NoResultException: ", nre);
log.error("< handleNoResultException");
return new ResponseEntity<Exception>(HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<Exception> handleException(Exception e) {
log.error("> handleException");
log.error("- Exception: ", e);
log.error("< handleException");
return new ResponseEntity<Exception>(e,
HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(value = HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorResponse handleNotFoundError(HttpServletRequest req, NotFoundException exception) {
List<Error> errors = Lists.newArrayList();
errors.add(new Error(String.valueOf(exception.getCode()), exception.getMessage()));
return new ErrorResponse(errors);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以试试下面的代码:
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler(Exception.class)
public ModelAndView handleError(HttpServletRequest request, Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Request: " + request.getRequestURL() + " raised " + e);
return new ModelAndView("error");
}
@ExceptionHandler(NoHandlerFoundException.class)
public ModelAndView handleError404(HttpServletRequest request, Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Request: " + request.getRequestURL() + " raised " + e);
return new ModelAndView("404");
}
}
Run Code Online (Sandbox Code Playgroud)
春季靴更新
自定义错误页面
如果要显示给定状态代码的自定义HTML错误页面,请将文件添加到/ error文件夹。错误页面可以是静态HTML(即添加到任何静态资源文件夹下),也可以使用模板构建。文件名应为确切的状态代码或系列掩码。
例如,要将404映射到静态HTML文件,您的文件夹结构应如下所示
src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
+- <other public assets>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35789 次 |
最近记录: |