学成在线----day3

1、JSR303校验

对填入的数据自动做一些约束

package com.xuecheng.content.model.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.math.BigDecimal;


(value="AddCourseDto", description="新增课程基本信息")
public class AddCourseDto {

 (message = "课程名称不能为空")
 (value = "课程名称", required = true)
 private String name;

 (message = "适用人群不能为空")
 (message = "适用人群内容过少",min = 10)
 (value = "适用人群", required = true)
 private String users;

 (value = "课程标签")
 private String tags;

 (message = "课程分类不能为空")
 (value = "大分类", required = true)
 private String mt;

 (message = "课程分类不能为空")
 (value = "小分类", required = true)
 private String st;

 (message = "课程等级不能为空")
 (value = "课程等级", required = true)
 private String grade;

 (value = "教学模式(普通,录播,直播等)", required = true)
 private String teachmode;

 (value = "课程介绍")
 private String description;

 (value = "课程图片", required = true)
 private String pic;

 (message = "收费规则不能为空")
 (value = "收费规则,对应数据字典", required = true)
 private String charge;

 (value = "价格")
 private Float price;
 (value = "原价")
 private Float originalPrice;


 (value = "qq")
 private String qq;

 (value = "微信")
 private String wechat;
 (value = "电话")
 private String phone;

 (value = "有效期")
 private Integer validDays;
}

    ("新增课程")
    ("/course")
    public CourseBaseInfoDto createCourseBase(  AddCourseDto addCourseDto){
        //获取到用户所属机构的id
        Long companyId = 1232141425L;
//        int i = 1/0;
        CourseBaseInfoDto courseBase = courseBaseInfoService.createCourseBase(companyId, addCourseDto);
        return courseBase;
    }

getBindingResult

getBindingResult是Spring MVC中的一个方法,用于获取表单数据绑定的结果对象。

在Spring MVC中,当处理表单提交时,会将表单数据绑定到一个Java对象中,这个过程称为数据绑定。当数据绑定出现错误时,Spring MVC会将错误信息存储在一个BindingResult对象中,我们可以使用getBindingResult方法来获取这个对象,从而获取表单数据绑定的结果。

BindingResult对象包含了以下信息:

  • 绑定的表单数据字段名
  • 绑定的表单数据类型
  • 绑定的表单数据值
  • 错误信息,如验证失败的错误信息

我们可以使用BindingResult对象来检查表单数据绑定是否成功,以及是否存在错误。如果存在错误,我们可以进一步处理这些错误信息,例如显示在页面上或者进行其他的操作。

下面是一个简单的示例:

@PostMapping("/submit-form")
public String submitForm(@Valid MyForm form, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        // 处理错误信息
    }
    // 处理表单提交
}

在上面的代码中,我们使用@Valid注解来标注MyForm对象,表示需要对其进行数据验证。如果数据验证失败,Spring MVC会将错误信息存储在bindingResult对象中,我们可以通过调用bindingResult.hasErrors()方法来检查是否存在错误信息。如果存在错误信息,我们可以进一步处理这些信息。

MethodArgumentNotValidException

   //MethodArgumentNotValidException
    
    (MethodArgumentNotValidException.class)
    (HttpStatus.INTERNAL_SERVER_ERROR)
    public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){

        BindingResult bindingResult = e.getBindingResult();
        //存储错误信息
        List<String> errors = new ArrayList<>();
        bindingResult.getFieldErrors().stream().forEach(item->{
            errors.add(item.getDefaultMessage());
        });

        //将list中的错误信息拼接起来
        String errMessage = StringUtils.join(errors, ",");
        //记录异常
        log.error("系统异常{}",e.getMessage(),errMessage);

        //解析出异常信息
        RestErrorResponse restErrorResponse = new RestErrorResponse(errMessage);
        return restErrorResponse;
    }

JSR303分组校验

由于增加和修改都可能用到同一个DTO,这时候就需要分组校验
学成在线----day3_第1张图片

package com.xuecheng.base.exception;

/**
 * @author Mr.M
 * @version 1.0
 * @description 用于分级校验,定义一些常用的组
 * @date 2023/2/14 9:37
 */
public class ValidationGroups {
 public interface Inster{};
 public interface Update{};
 public interface Delete{};
}

2、参数合法性校验

学成在线----day3_第2张图片

3、修改课程接口

    @Override
    public CourseBaseInfoDto updateCourseBase(Long companyId, EditCourseDto editCourseDto) {

        //拿到课程id
        Long courseId = editCourseDto.getId();
        //查询课程信息
        CourseBase courseBase = courseBaseMapper.selectById(courseId);
        if(courseBase == null){
            XueChengPlusException.cast("课程不存在");
        }

        //数据合法性校验
        //根据具体的业务逻辑去校验
        //本机构只能修改本机构的课程
        if(!companyId.equals(courseBase.getCompanyId())){
            XueChengPlusException.cast("本机构只能修改本机构的课程");
        }

        //封装数据
        BeanUtils.copyProperties(editCourseDto,courseBase);
        //修改时间
        courseBase.setChangeDate(LocalDateTime.now());

        //更新数据库
        int i = courseBaseMapper.updateById(courseBase);
        if(i<=0){
            XueChengPlusException.cast("修改课程失败");
        }
        //更新营销信息
        //todo:更新营销信息
        //查询课程信息
        CourseBaseInfoDto courseBaseInfo = getCourseBaseInfo(courseId);

        return courseBaseInfo;
    }

你可能感兴趣的:(java,servlet,html)