gateway nacosconfig nacosdiscovery
1、springcloud-oss结合
引入了阿里云oss来保存商品logo的图片。
具体操作的模块:
新建了xiaoshimall-third-party模块(此模块专门保存第三方服务)
- xiaoshimall-third-party模块
- 引用了 xiaoshimall-common模块 并且因为目前没有mp操作所以排除了mp依赖
- 引用了spring-cloud-starter-alicloud-oss依赖(此依赖整合了oss 和 springcloud)不用再手动创建ossclient对象,直接用
@Autowired
private OSS ossClient; 获取即可
- 上传图片采用 前端向后端third-party模块发送请求,获取服务端的签名后携带签名直接发送请求给oss进行上传
- 后端代码:
@RequestMapping("/oss/policy") public R policy(){ // 填写Host地址,格式为https://bucketname.endpoint。 String host = "https://" + bucket + ".oss-cn-beijing.aliyuncs.com"; // 设置上传回调URL,即回调服务器地址,用于处理应用服务器与OSS之间的通信。OSS会在文件上传完成后,把文件上传信息通过此回调URL发送给应用服务器。 //String callbackUrl = "https://192.168.0.0:8888"; // 设置上传到OSS文件的前缀,可置空此项。置空后,文件将上传至Bucket的根目录下。 String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String dir = format + "/"; Map<String, String> respMap = null; //OSSClient client = new OSSClient(endpoint, accessId, accessKey); try { long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes("utf-8"); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = ossClient.calculatePostSignature(postPolicy); respMap = new LinkedHashMap<String, String>(); respMap.put("accessid", accessId); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("dir", dir); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); // respMap.put("expire", formatISO8601Date(expiration)); } catch (Exception e) { // Assert.fail(e.getMessage()); System.out.println(e.getMessage()); } return R.ok().put("data",respMap); }
- 传输过程:
- 前端向服务端发送请求,请求签名数据
- 后端返回的数据:
- 前端携带数据发送请求给aliyunoss
数据上传成功。
- 前端向服务端发送请求,请求签名数据
2、后端数据校验(JSR303
请求的数据不光在前端校验,后端也需要校验
-
首先在entity中 在要校验的字段上添加对应校验注解 (@NotNUll @Null @URL …)
-
在对应的controller 要校验的8请求参数上添加@Valid
-
一般要使用分组校验
- 首先在xiaoshimall-common创建vaild包 创建AddGroup.interface 和UpdateGroup.interface
- 在字段上的校验注解中 添加 groups = {UpdateGroup.class,UpdateStatusGroup.class} 属性表示对应分组时才执行数据校验。
- 在对应的controller 要校验的请求参数上添加**@Validated(UpdateGroup.class)**表示执行此分组字段的数据校验
-
还可以自定义校验注解:
自定义校验 编写一个自定义的校验注解````一个校验注解可以适配多个校验器 编写自定义的校验器ConstraintValidator 关联自定义的校验器和自定义的校验注解 1````product resources 下的 ValidationMessages.properties 2````common vaild 下的 ListValue、 3````common vaild 下的 ListValueConstraintValidator