diff --git a/build.gradle.kts b/build.gradle.kts
index e11750d..b77e942 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -7,7 +7,7 @@ plugins {
}
group = "xyz.thewhitedog9487"
-version = "0.4.0"
+version = "0.4.1"
java {
toolchain {
diff --git a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java
index a791552..8f46073 100644
--- a/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java
+++ b/src/main/java/xyz/thewhitedog9487/WebAPI/Controller/Message.java
@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.MissingRequestHeaderException;
import org.springframework.web.bind.annotation.*;
@@ -60,14 +61,21 @@ class Message {
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(implementation = ResponseData.class),
- examples = @ExampleObject(value = "{\n" +
+ examples = { @ExampleObject(value = "{\n" +
" \"code\": 400,\n" +
" \"message\": \"请求缺少必要的头部信息\",\n" +
" \"data\": {\n" +
" \"缺失的头部\": \"X-API-Key\"\n" +
" }\n" +
- "}") ),
- description = "缺少必须的请求头,请查看响应中的“缺失的头部”以诊断问题"),
+ "}", name = "缺少头部信息") ,
+ @ExampleObject(value = "{\n" +
+ " \"code\": 400,\n" +
+ " \"message\": \"请求体无法解析\",\n" +
+ " \"data\": {\n" +
+ " \"错误信息\": \"JSON parse error: Unexpected character ('}' (code 125)): was expecting double-quote to start field name\"\n" +
+ " }\n" +
+ "}", name = "请求体无法解析") } ),
+ description = "客户端发送的请求存在问题,请检查响应的data字段以获取更多信息"),
@ApiResponse(responseCode = "401",
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
@@ -84,7 +92,7 @@ class Message {
content = @Content(
mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(implementation = ResponseData.class),
- examples = @ExampleObject(value = "{\n" +
+ examples = { @ExampleObject(value = "{\n" +
" \"code\": 500,\n" +
" \"message\": \"消息发送失败\",\n" +
" \"data\": {\n" +
@@ -92,8 +100,19 @@ class Message {
" \"错误信息\": \"POST /channels/1398192763845214/messages returned 404 Not Found with response {code=10003, message=Unknown Channel}\",\n" +
" \"频道ID\": \"1398192763845214\"\n" +
" }\n" +
- "}")),
- description = "消息发送失败,可能是由于Discord服务器问题或其他内部错误,请查看响应Body的“内容”子项以确定原因") } )
+ "}", name = "消息发送失败"),
+ @ExampleObject(value = "{\n" +
+ " \"code\": 500,\n" +
+ " \"message\": \"处理请求时发生未知错误\",\n" +
+ " \"data\": {\n" +
+ " \"错误信息\": \"\"\n" +
+ " }\n" +
+ "}", name = "未知错误") } ),
+ description = """
+ 消息发送失败,可能是由于Discord服务器问题或其他内部错误,请查看响应Body以确定原因
+
+ 另外,所有未被针对性处理的异常都会触发此响应
+ """) } )
@PostMapping("/discord")
ResponseEntity DiscordPush(
@Parameter(description = "用于身份验证的API密钥", required = true, example = "ds1858dscc8745sfwe")
@@ -144,5 +163,19 @@ class Message {
return new ResponseEntity<>(new ResponseData(
HttpStatus.BAD_REQUEST.value(),
"请求缺少必要的头部信息",
- Map.of("缺失的头部", Exception.getHeaderName())), HttpStatus.BAD_REQUEST);}
+ Map.of("缺失的头部", Exception.getHeaderName())), HttpStatus.BAD_REQUEST); }
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ ResponseEntity HandleMessageNotReadable(HttpMessageNotReadableException Exception, HttpServletRequest Request) {
+ log.warn("请求体无法解析:{}", Exception.getMessage());
+ return new ResponseEntity<>(new ResponseData(
+ HttpStatus.BAD_REQUEST.value(),
+ "请求体无法解析",
+ Map.of("错误信息", Exception.getMessage())), HttpStatus.BAD_REQUEST); }
+ @ExceptionHandler(Exception.class)
+ ResponseEntity HandleOtherException(Exception Exception, HttpServletRequest Request) {
+ log.error("处理请求时发生未知错误:", Exception);
+ return new ResponseEntity<>(new ResponseData(
+ HttpStatus.INTERNAL_SERVER_ERROR.value(),
+ "处理请求时发生未知错误",
+ Map.of("错误信息", Exception.getMessage() == null ? "" : Exception.getMessage()) ), HttpStatus.INTERNAL_SERVER_ERROR); }
}