接口500异常:服务器内部异常,通常是数据库异常。
问题一:
1‘报错为:
前端返回删除成功,后端也不报错,但是我进行删除操作后,并没有删除数据库中的数据。
==> Preparing: DELETE FROM category WHERE id=? ==> Parameters: null
执行了删除操作,前端能看见id,但是后端数据库返回的id值为null
原代码:
@DeleteMapping
public R<String> delete( Long id) {
log.info("删除分类,id为:", id);
try {
categoryService.remove(id);
return R.success("分类信息删除成功");
} catch (Exception e) {
log.error("删除分类失败,ID:{}", id, e);
throw new RuntimeException("删除操作失败");
}
排查原因为:
前端传过来的值为ids,而后端命名为id,传参无法正常完成,前端传过来的参数后端接收不到。
修改代码为:加上注解@RequestParm("ids") 指定前端传过来的数据为ids指定为后端id
@DeleteMapping
public R<String> delete(@RequestParam("ids") Long id) {
log.info("删除分类,id为:", id);
try {
categoryService.remove(id);
return R.success("分类信息删除成功");
} catch (Exception e) {
log.error("删除分类失败,ID:{}", id, e);
throw new RuntimeException("删除操作失败");
}
}
@RequestParm:用于将请求参数(前端的URL)绑定到控制器(controller)方法参数上的注解
问题二:
2.添加菜品和修改菜品操作不能成功,因为图片无法上传上去,选中了图片,但是图片无法上传上后台
报错显示为:5 INFO 20388 --- [io-8080-exec-10] com.cyx.reggie.filter.LoginCheckFilter : 本次请求/common/upload不需要处理
2024-07-23 14:20:29.150 ERROR 20388 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.] with root cause
这是因为上传的文件超过了服务器允许的最大文件大小限制,这里我们简单解决这个问题。
将下面的代码添加到application.yml
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
在这里,maxUploadSize
属性设置了单个上传文件的最大大小(以字节为单位),而maxInMemorySize
设置了在提交到临时存储之前,文件的最大内存大小。
问题三:
3.404报错:网页错误情况返回的一种状态码,表示服务器无法找到用户请求的资源。
我编写的菜品删除和停售按钮点击后出现404报错
@DeleteMapping()
public R<String> delete(@RequestBody String ids) {
log.info(ids.toString());
// 使用逗号分割字符串,并转换为List
List<String> id = Arrays.asList(ids.split(","));
dishService.removeByIds(id);
return R.success("删除成功");
}
这个报错是因为没有清晰注解的使用条件,这里传入的请求是URL,但是对于注解来说 @RequestBody :用于接收JSON格式的请求体,并自动将其转换为请求体类的对象。
如果要使用请求体接收,应该将代码修改为:
@DeleteMapping("/delete")
public R<String> delete(@RequestBody DeleteDishRequest request) {
log.info("Received ids: {}", request.getIds());
// 使用逗号分割字符串,并转换为List
List<String> idList = Arrays.asList(request.getIds().split(","));
dishService.removeByIds(idList);
return R.success("删除成功");
}
更为简单的修改方式为,在原代码上直接删除@RequestBody注解