当前位置:   article > 正文

Service层的数据校验_service 参数验证

service 参数验证

在传统的单体项目开发中,三层结构WEB层、Service层、DAO层最终是一个整体,调用关系也是一一对应,WEB->Service->DAO的调用关系。程序的”入口“只能是用户从WEB层发起调用,为了对数据负责、也为了避免不合法的数据浪费性能所以会在WEB层做数据校验,而Service层基本处于裸奔的状态。

如今分布式、微服务大行其道,WEB层和Service层未必是一一对应的关系 了,可能是一对多、多对一、多对多的关系,你的Service不一定会有谁来调用,所以在Service层进行数据校验也很有必要了。

在基于SpringBoot的开发中,SpringBoot为我们提供了开箱即用的数据校验功能,一个@Validate注解就能搞定。但是这是在web层,因为一般情况下WEB层会依赖spring-boot-start-web启动器,启动器内部已经包含完整的数据校验功能。

service层要实现数据校验也很easy,只需要添加以下依赖:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

<dependency>
     <groupId>org.hibernate.validator</groupId>
     <artifactId>hibernate-validator</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接下来的数据校验方式就和controller完全一致了。

示例:

//service-api层
public interface UserService {
	UserDto loginByUsernameAndPasword(@NotBlank(message = "用户名不能为空") String username,
                                      @NotBlank(message = "密码不能为空")  String password);
  
  	UserDto insert(@Valid @NotNull(message = "插入对象不能为空") UserDto user);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
@Validate //标识当前类中方法需要进行参数校验
public class UserServiceImpl implements UserService {
	public UserDto loginByUsernameAndPasword(@NotBlank(message = "用户名不能为空") String username,
                                             @NotBlank(message = "密码不能为空")  String password)	{
    	//do login...    
	}
  
  	//@Valid标识当前参数需要进行级联校验,不加此注解可能无法完成参数级联校验
  	public UserDto insert(@Valid @NotNull(message = "插入对象不能为空") UserDto userDto) {
      // do insert...
    }
  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

以上同时用到了@Validate、@Valid两个注解,两者区别:

@Valid由JSR303定义、@Validate由Spring定义(@Valid的变体);
@Valid支持级联校验、@Validate不支持级联校验。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/392982
推荐阅读
相关标签
  

闽ICP备14008679号