优化
This commit is contained in:
@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
import org.springframework.web.multipart.MaxUploadSizeExceededException;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
@@ -105,6 +106,16 @@ public class GlobalExceptionHandler {
|
||||
return failure(ResultCode.CONFLICT, "资源正在处理中,请稍后重试", request);
|
||||
}
|
||||
|
||||
@ExceptionHandler(MaxUploadSizeExceededException.class)
|
||||
public ResponseEntity<ApiResponse<Void>> handleMaxUploadSize(
|
||||
MaxUploadSizeExceededException exception, HttpServletRequest request) {
|
||||
long maxBytes = exception.getMaxUploadSize();
|
||||
String message = maxBytes > 0
|
||||
? "上传文件不能超过" + Math.max(1, (maxBytes + 1024 * 1024 - 1) / (1024 * 1024)) + "MB"
|
||||
: "上传文件超过服务允许大小";
|
||||
return failure(ResultCode.BAD_REQUEST, message, request);
|
||||
}
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public ResponseEntity<ApiResponse<Void>> handleUnexpected(Exception exception, HttpServletRequest request) {
|
||||
log.error("Unhandled request failure requestId={} traceId={}",
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
import org.springframework.dao.CannotAcquireLockException;
|
||||
import org.springframework.web.multipart.MaxUploadSizeExceededException;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@@ -129,6 +130,20 @@ class GlobalExceptionHandlerTest {
|
||||
assertThat(response.getBody().requestId()).isEqualTo("lock-timeout");
|
||||
}
|
||||
|
||||
@Test
|
||||
void oversizedMultipartReturnsClearBadRequestInsteadOfInternalError() {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.setAttribute(CorrelationContext.REQUEST_ID, "oversized-photo");
|
||||
|
||||
var response = handler.handleMaxUploadSize(
|
||||
new MaxUploadSizeExceededException(10L * 1024 * 1024), request);
|
||||
|
||||
assertThat(response.getStatusCode().value()).isEqualTo(200);
|
||||
assertThat(response.getBody().code()).isEqualTo(ResultCode.BAD_REQUEST.code());
|
||||
assertThat(response.getBody().message()).isEqualTo("上传文件不能超过10MB");
|
||||
assertThat(response.getBody().requestId()).isEqualTo("oversized-photo");
|
||||
}
|
||||
|
||||
private void paging(long page) {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user