dede網(wǎng)站百度統(tǒng)計怎么做中國免費網(wǎng)站服務器下載
目錄
完善登錄功能
注冊接口參數(shù)校驗
完善分頁查詢
完善日期格式
更新文章分類和添加文章分類的分組校驗
?編輯
自定義校驗?
文件上傳?
完善登錄功能
對前端傳過來的明文密碼進行md5加密處理
password = DigestUtils.md5DigestAsHex(password.getBytes());
?這樣既可
注冊接口參數(shù)校驗
Spring Validation
Spring 提供的一個參數(shù)校驗框架,使用預定義的注解完成參數(shù)校驗
使用Spring Validation,對注冊接口的參數(shù)進行合法性校驗
引入Spring Validation 起步依賴
在參數(shù)前面添加@Pattern注解
在Controller類上添加@Validated注解
完善分頁查詢
pom.xml:
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId></dependency>
mapper:動態(tài)sql
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.EmployeeMapper"><select id="pageQuery" resultType="com.sky.entity.Employee">select * from employee<where><if test="name!=null and name!=''">and name like concat('%',#{name},'%')</if></where>order by create_time desc</select>
</mapper>
?service:
完善日期格式
解決方式:
方式一:在屬性上加入注解,對日期進行格式化
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;
方式二:在 WebMvcConfiguration 中擴展Spring MVC的消息轉換器,統(tǒng)一對日期類型進行格式化處理
//擴展springMvc框架的消息轉化器protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("擴展消息轉化器..");//創(chuàng)建一個消息轉化器對象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//需要為消息轉化器設置一個對象轉化器,對象轉化器可以將java對象序列化為json數(shù)據(jù)converter.setObjectMapper(new JacksonObjectMapper());//將自己的消息轉化器加入容器中converters.add(0,converter);}
?
更新文章分類和添加文章分類的分組校驗
添加文章中沒有傳id參數(shù)?
更新文章分類中傳了id參數(shù)?
這樣運行起來就會報錯
?可以這樣👇
package com.yjj.bigevent.Pojo;import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.groups.Default;
import lombok.Data;import java.time.LocalDateTime;@Data
public class Category {@NotNull(groups = Update.class)private Integer id;//主鍵ID@NotEmptyprivate String categoryName;//分類名稱@NotEmptyprivate String categoryAlias;//分類別名private Integer createUser;//創(chuàng)建人ID@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//創(chuàng)建時間@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;//更新時間//如果說某個校驗項沒有指定分組,默認屬于Default分組// 分組之間可以繼承,A extends B那么A中擁有B中所有的校驗項public interface Add extends Default {}public interface Update extends Default{}
}
就不會報錯了
自定義校驗?
自定義注解State
package com.yjj.bigevent.Anno;import com.yjj.bigevent.Validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;@Target({ FIELD})//元注解
@Retention(RUNTIME)//元注解
@Documented//元注解
@Constraint(validatedBy = { StateValidation.class})//指定提供校驗規(guī)則的類
public @interface State {//提供校驗失敗后的提示信息String message() default "state參數(shù)的值只能是已發(fā)布或者草稿";//指定分組Class<?>[] groups() default { };//負載獲取到State注解的附加信息Class<? extends Payload>[] payload() default { };
}
自定義校驗數(shù)據(jù)的類StateValidation實現(xiàn)ConstraintValidator接口
package com.yjj.bigevent.Validation;import com.yjj.bigevent.Anno.State;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;public class StateValidation implements ConstraintValidator<State,String> {//@param value 將來要校驗的數(shù)據(jù)//@param context context in which the constraint is evaluated//@return 如果返回false,則校驗不通過,如果返回true,則校驗通過@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {//提供校驗規(guī)則if (value==null) {return false;}if (value.equals("已發(fā)布")||value.equals("草稿")){return true;}return false;}
}
在需要校驗的地方使用自定義注解?
測試
文件上傳?
導入阿里云的依賴坐標
pom.xml?
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>
如果使用的是Java 9及以上的版本,則需要添加JAXB相關依賴。添加JAXB相關依賴示例代碼如下:
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>
工具類:?
package com.yjj.bigEvent.Utils;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;import java.io.InputStream;public class AliOssUtil {private static final String ENDPOINT = "https://加上訪問端口(https://oss-cn-hangzhou.aliyuncs.com)";private static final String ACCESS_KEY_ID = "ACCESS的id";private static final String SECRET_ACCESS_KEY = "ACCESS的secret";private static final String BUCKET_NAME = "自己的bucket名字";//上傳文件,返回文件的公網(wǎng)訪問地址public static String uploadFile(String objectName, InputStream inputStream){// 創(chuàng)建OSSClient實例。OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,SECRET_ACCESS_KEY);//公文訪問地址String url = "";try {// 創(chuàng)建存儲空間。ossClient.createBucket(BUCKET_NAME);ossClient.putObject(BUCKET_NAME, objectName, inputStream);url = "https://"+BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}return url;}
}