Spring Boot Admin登录接口在Postman中未返回自定义错误信息问题
解决无效登录时自定义错误消息不显示的问题
嘿,我知道你遇到的问题了——现在无效登录时返回的错误信息里message字段是空的,而你希望它显示Admin not found对吧?这其实是因为Spring Boot默认的错误处理逻辑没有把自定义异常的消息带到响应里,我给你两种简单的解决办法:
方法一:快速开启默认错误消息暴露(最简单)
你只需要在项目的配置文件里添加一行配置,让Spring Boot把异常的消息包含到默认的错误响应中:
如果是application.properties:
server.error.include-message=always
如果是application.yml:
server: error: include-message: always
添加完配置后重启项目,再用Postman测试无效登录,你就能得到包含自定义消息的响应了:
{ "timestamp": "2020-05-19T13:59:01.172+00:00", "status": 404, "error": "Not Found", "message": "Admin not found", "path": "/api/adminLogin" }
方法二:自定义全局异常处理器(更灵活)
如果你想完全控制错误响应的结构或者添加更多自定义内容,可以写一个全局异常处理器:
首先创建一个全局异常处理类:
import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.context.request.WebRequest; import java.time.LocalDateTime; @ControllerAdvice public class GlobalExceptionHandler { // 专门处理ResourceNotFoundException @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<CustomErrorResponse> handleResourceNotFound(ResourceNotFoundException ex, WebRequest request) { CustomErrorResponse errorResponse = new CustomErrorResponse(); errorResponse.setTimestamp(LocalDateTime.now().toString()); errorResponse.setStatus(HttpStatus.NOT_FOUND.value()); errorResponse.setError("Admin Not Found"); // 可以自定义error字段 errorResponse.setMessage(ex.getMessage()); // 拿到你抛出的异常消息 errorResponse.setPath(request.getDescription(false).replace("uri=", "")); // 动态获取请求路径 return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND); } // 自定义错误响应的实体类 static class CustomErrorResponse { private String timestamp; private int status; private String error; private String message; private String path; // 生成getter和setter方法 public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getError() { return error; } public void setError(String error) { this.error = error; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } } }
这种方式你可以完全自定义响应里的每一个字段,比如把error改成Admin Not Found,或者添加额外的字段,非常灵活。
两种方法都能解决你的问题,如果你只是想快速看到自定义消息,方法一就足够了;如果需要更定制化的响应,方法二更合适。
内容的提问来源于stack exchange,提问作者Vishavjeet
相关产品推荐
相关产品推荐

