优化
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.bind.annotation.RestControllerAdvice;
|
||||||
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
import org.springframework.web.multipart.MaxUploadSizeExceededException;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -105,6 +106,16 @@ public class GlobalExceptionHandler {
|
|||||||
return failure(ResultCode.CONFLICT, "资源正在处理中,请稍后重试", request);
|
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)
|
@ExceptionHandler(Exception.class)
|
||||||
public ResponseEntity<ApiResponse<Void>> handleUnexpected(Exception exception, HttpServletRequest request) {
|
public ResponseEntity<ApiResponse<Void>> handleUnexpected(Exception exception, HttpServletRequest request) {
|
||||||
log.error("Unhandled request failure requestId={} traceId={}",
|
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.http.HttpStatus;
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
import org.springframework.dao.CannotAcquireLockException;
|
import org.springframework.dao.CannotAcquireLockException;
|
||||||
|
import org.springframework.web.multipart.MaxUploadSizeExceededException;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
@@ -129,6 +130,20 @@ class GlobalExceptionHandlerTest {
|
|||||||
assertThat(response.getBody().requestId()).isEqualTo("lock-timeout");
|
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) {
|
private void paging(long page) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
spring:
|
spring:
|
||||||
|
servlet:
|
||||||
|
multipart:
|
||||||
|
max-file-size: ${LASTLEG_MULTIPART_MAX_FILE_SIZE:10MB}
|
||||||
|
max-request-size: ${LASTLEG_MULTIPART_MAX_REQUEST_SIZE:11MB}
|
||||||
datasource:
|
datasource:
|
||||||
url: ${LASTLEG_DB_URL}
|
url: ${LASTLEG_DB_URL}
|
||||||
username: ${LASTLEG_DB_USERNAME}
|
username: ${LASTLEG_DB_USERNAME}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
server:
|
server:
|
||||||
port: ${LASTLEG_PORT:9303}
|
port: ${LASTLEG_PORT:9303}
|
||||||
spring:
|
spring:
|
||||||
|
servlet:
|
||||||
|
multipart:
|
||||||
|
max-file-size: ${LASTLEG_MULTIPART_MAX_FILE_SIZE:10MB}
|
||||||
|
max-request-size: ${LASTLEG_MULTIPART_MAX_REQUEST_SIZE:11MB}
|
||||||
sql:
|
sql:
|
||||||
init:
|
init:
|
||||||
mode: always
|
mode: always
|
||||||
|
|||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
package com.baiyue.lastleg.inboundplan.pda;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class ReceivingPhotoUploadConfigurationContractTest {
|
||||||
|
@Test
|
||||||
|
void lastlegAcceptsTheSameTenMegabyteLimitAsFileService() throws Exception {
|
||||||
|
String application = read("lastleg-service/src/main/resources/application.yml");
|
||||||
|
String overseas = read("config/nacos/overseas/lastleg-service.yml");
|
||||||
|
|
||||||
|
for (String configuration : new String[]{application, overseas}) {
|
||||||
|
assertThat(configuration).contains(
|
||||||
|
"max-file-size: ${LASTLEG_MULTIPART_MAX_FILE_SIZE:10MB}",
|
||||||
|
"max-request-size: ${LASTLEG_MULTIPART_MAX_REQUEST_SIZE:11MB}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String read(String relative) throws Exception {
|
||||||
|
Path path = Path.of(relative);
|
||||||
|
if (!Files.exists(path)) path = Path.of("..").resolve(relative);
|
||||||
|
return Files.readString(path, StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user