Commit 0aa605e9 by 段启岩

对博客参数验证进行改造,添加自定义校验器和分组

parent 67f307f8
package cn.meteor.beyondclouds.core.validation.constraints;
import cn.meteor.beyondclouds.core.validation.validator.NullOrNotBlankValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.constraints.AssertTrue;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* null or not blank
* 被验证的参数可以为空,但如果对其进行赋值则该参数必须有有效字符
* @author meteor
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Documented
@Constraint(validatedBy = NullOrNotBlankValidator.class)
public @interface NullOrNotBlank {
String message() default "null or not blank";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
AssertTrue[] value();
}
}
package cn.meteor.beyondclouds.core.validation.groups;
/**
* 参数验证分组-插入
* @author meteor
*/
public interface InsertGroup {
}
package cn.meteor.beyondclouds.core.validation.groups;
/**
* 参数验证分组-更新
* @author meteor
*/
public interface UpdateGroup {
}
package cn.meteor.beyondclouds.core.validation.validator;
import cn.meteor.beyondclouds.core.validation.constraints.NullOrNotBlank;
import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* NullOrNotBlank参数校验器
* @author meteor
*/
public class NullOrNotBlankValidator implements ConstraintValidator<NullOrNotBlank, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (null == value) {
return true;
}
if (!StringUtils.isEmpty(value.trim())) {
return true;
}
return false;
}
}
......@@ -6,12 +6,13 @@ import cn.meteor.beyondclouds.core.annotation.Anonymous;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.bean.Subject;
import cn.meteor.beyondclouds.core.validation.groups.InsertGroup;
import cn.meteor.beyondclouds.core.validation.groups.UpdateGroup;
import cn.meteor.beyondclouds.modules.blog.bean.BlogDetail;
import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.blog.exception.BlogCategoryServiceException;
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.blog.form.PublishBlogForm;
import cn.meteor.beyondclouds.modules.blog.form.UpdateBlogForm;
import cn.meteor.beyondclouds.modules.blog.form.BlogForm;
import cn.meteor.beyondclouds.modules.blog.service.IBlogService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
......@@ -19,6 +20,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
......@@ -42,7 +44,7 @@ public class BlogApi {
@ApiOperation("发布博客")
@PostMapping("/blog")
public Response publishBlog (@RequestBody @Valid PublishBlogForm publishBlogForm, BindingResult result, @CurrentSubject Subject subject) {
public Response publishBlog (@RequestBody @Validated(InsertGroup.class)BlogForm publishBlogForm, BindingResult result, @CurrentSubject Subject subject) {
if (result.hasErrors()) {
return Response.fieldError(result.getFieldError());
}
......@@ -52,7 +54,7 @@ public class BlogApi {
blog.setUserId((String) subject.getId());
try {
blogService.publishBlog(blog, publishBlogForm.getBlogContent(),
blogService.publishBlog(blog, publishBlogForm.getContent(),
publishBlogForm.getTopicIds(), publishBlogForm.getTagIds());
return Response.success();
} catch (BlogCategoryServiceException e) {
......@@ -130,7 +132,7 @@ public class BlogApi {
@ApiOperation("修改博客")
@PutMapping("/blog/{blogId}")
public Response updateBlog (@PathVariable("blogId") String blogId , @RequestBody @Valid UpdateBlogForm updateBlogForm ,
public Response updateBlog (@PathVariable("blogId") String blogId , @RequestBody @Validated(UpdateGroup.class) BlogForm updateBlogForm ,
BindingResult result , @CurrentSubject Subject subject) {
if (result.hasErrors()) {
return Response.fieldError(result.getFieldError());
......
package cn.meteor.beyondclouds.modules.blog.form;
import cn.meteor.beyondclouds.core.validation.constraints.NullOrNotBlank;
import cn.meteor.beyondclouds.core.validation.groups.InsertGroup;
import cn.meteor.beyondclouds.core.validation.groups.UpdateGroup;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author gaoTong
* @date 2020/2/1 14:48
* @date 2020/1/31 9:36
*/
@Data
public class UpdateBlogForm {
public class BlogForm {
@NotEmpty(message = "标题不能为空")
@NotNull(message = "标题不能为空", groups = InsertGroup.class)
@NotEmpty(message = "标题不能为空", groups = InsertGroup.class)
@NullOrNotBlank(message = "请传入有效的标题", groups = UpdateGroup.class)
private String blogTitle;
@NullOrNotBlank(message = "请传入有效的原文链接", groups = {InsertGroup.class, UpdateGroup.class})
private String originLink;
@NotEmpty(message = "摘要不能为空")
@NotNull(message = "摘要不能为空", groups = InsertGroup.class)
@NotEmpty(message = "摘要不能为空", groups = InsertGroup.class)
@NullOrNotBlank(message = "请传入有效的摘要", groups = UpdateGroup.class)
private String blogAbstract;
@NotNull(message = "博客类型不能为空", groups = InsertGroup.class)
private Integer categoryId;
@NotEmpty(message = "内容不能为空")
@NotNull(message = "内容不能为空", groups = InsertGroup.class)
@NotEmpty(message = "内容不能为空", groups = InsertGroup.class)
@NullOrNotBlank(message = "请传入有效的博客内容", groups = UpdateGroup.class)
private String content;
private List<String> topicIds;
private List<String> tagIds;
@NotNull(message = "浏览权限不能为空", groups = InsertGroup.class)
private Integer viewPrivileges;
@NotNull(message = "评论权限不能为空", groups = InsertGroup.class)
private Boolean allowComment;
@NotNull(message = "转载权限不能为空", groups = InsertGroup.class)
private Boolean allowForward;
@NotEmpty(message = "封面图不能为空")
@NotNull(message = "封面图不能为空", groups = InsertGroup.class)
@NotEmpty(message = "封面图不能为空", groups = InsertGroup.class)
@NullOrNotBlank(message = "请传入有效的封面图链接", groups = UpdateGroup.class)
private String cover;
}
package cn.meteor.beyondclouds.modules.blog.form;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author gaoTong
* @date 2020/1/31 9:36
*/
@Data
public class PublishBlogForm {
@NotNull(message = "标题不能为空")
@NotEmpty(message = "标题不能为空")
private String blogTitle;
private String originLink;
@NotNull(message = "摘要不能为空")
@NotEmpty(message = "摘要不能为空")
private String blogAbstract;
@NotNull(message = "博客类型不能为空")
private Integer categoryId;
@NotNull(message = "内容不能为空")
@NotEmpty(message = "内容不能为空")
private String blogContent;
private List<String> topicIds;
private List<String> tagIds;
@NotNull(message = "浏览权限不能为空")
private Integer viewPrivileges;
@NotNull(message = "评论权限不能为空")
private Boolean allowComment;
@NotNull(message = "转载权限不能为空")
private Boolean allowForward;
@NotNull(message = "封面图不能为空")
@NotEmpty(message = "封面图不能为空")
private String cover;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment