大意是:未能在”窗口”上执行”fetch”:使用 GET/HEAD 方法请求不能具有主体。
原因是因为接口是get,但是又标注以requestbody(请求体)来接收参数。
说明:在get请求体中不能使用@requestBody来做请求的。
1:GET:不能使用@requestBody
2:POST:可以使用@requestBody(对于参数转化的配置必须统一)和requestParam
改成@PostMapping就没问题了
swagger注解之@ApiImplicitParam,前台传入的是List集合如何写
在注解中添加 allowMultiple 属性即可
swagger报400的原因可能有很多,主要是注意格式的书写,比如map数据类型,key和value都要用双引号
___________________________________________________
分页工具的编写:前端需要查询出来的总条数和根据currentPage和pageSize截断的list数据,
前端给我的是currentPage和pageSize,一开始我还在想,我要是用sql语句的limit分页的话,前端怎么能根据总条数来做总页数。。
现在想明白不能用limit,只能我在后台对查出来的list集合进行处理。
查了资料之后,加了guava依赖,调用了Lists的partition方法,算是完成了。。
<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1.1-jre</version> </dependency>
基本算是测试通过了。。
下面的情况会报异常:
currentPage超过了最大页数(total = 3,pageSize = 10, currentPage = 2的情况,正常来说此时currentPage只会是1))会展示list最后一条数据,但是前端会根据我给的总条数来算的总页数,所以currentPage理论上不会超过total总页数,就比如3条数据每页2条只会有1~2页给用,3条数据每页10条就只会有1页给用,这种情况。所以这个bug触发的前提是用户自己在url上改参数。。)
要完善只需要限制lists.get()的参数的值就行了,大于等于0并且小于等于最大页数
————————————————————————————————————————————————————
easypoi简单的导入导出的使用,ExcelUtil的代码在这个博主的gitee项目里面。
参考博客:https://zhuanlan.zhihu.com/p/383896991
@PostMapping("/importExcel") public Result importExcel(@RequestParam("file") MultipartFile file) { try { return new Result(true,StatusCode.OK, ss.importExcel(file)); }catch (Exception e){ return new Result(false,StatusCode.ERROR, ss.importExcel(file)); } }
@Override public String importExcel(MultipartFile file) { ImportParams importParams = new ImportParams(); //表格标题行数,默认0 importParams.setTitleRows(1); //是否需要校验上传的Excel importParams.setNeedVerify(true); //告诉easypoi我们自定义的验证器 // importParams.setVerifyHandler(userVerifyHandler); ExcelImportResult<SchoolmateDTO> result = null; try { result = ExcelImportUtil.importExcelMore(file.getInputStream(),SchoolmateDTO.class,importParams); if (!result.isVerifyFail() && !CollectionUtils.isEmpty(result.getList())) { for (SchoolmateDTO vo : result.getList()) { Schoolmate sm = new Schoolmate(); BeanUtils.copyProperties(vo,sm); this.insert(sm); } } } catch (Exception e) { e.printStackTrace(); return "文档校验失败"; } return "导入成功"; }
导出也是根据上面的博客做的。
我的导出可以正常导出Excel,但是会有中文乱码的问题
这个是swagger的问题,实际上我直接访问对应的url,就可以拿到excel。而前端主要是createElement(‘a’),设置href就可以调用接口了。
——————————————————————————————————————————————————————————————————
跨域问题
注意这里,我本来写的是@GetMapping(“/”),前端用的就是…/classinfo/,但是这样访问的话,第一次会跨域,第二次就不会(我也不知道具体的原因)。。
但是改成上面那样,就没问题了,第一次访问也不会跨域。。具体是什么配置起作用了暂时不清楚。
——————————————————————————————————————————————————————————————————————
可以看到,虽然加了@Component,但是没有实现自动装配。
这样写没用嗷。@SpringBootApplication本来就会扫描当前包和子包的文件。
最后发现是文件本身的问题。。
这样写也没有解决问题,handler还是null,但是最骚的是这能骗过idea,@Autowired不会提示说【自动装配成员必须在有效的 Spring bean 中定义(@Component|@Service|…) 】中。。
忽然想起,@Service应该写到Service上,不是它的impl类上。。
还是没卵用。。
直接上结果吧。
说实话这并不算解决了问题,但是查了一下代码发现是service和controller,老师说不能过多地用框架,所以我有很大一部分是用原生JDBC(比如service的装配是用Service s = new serviceImpl()),这种畸形的开发导致了这种问题,我新开了一个project用纯springboot+jpa做了excel导入导出并不会有这种问题。。
先用图上那种这种跳过问题的解决方式。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199820.html