首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自定义验证

自定义验证
EN

Stack Overflow用户
提问于 2014-12-16 13:42:06
回答 3查看 65关注 0票数 0

我希望有一个自定义注解来验证电子邮件在表单中是否是唯一的。Aldready成功地创建了一个"ValidEmail“注释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EmailValidatorImpl.class)
public @interface ValidEmail {
    String message() default "{error.validEmail}";
    String[] groups() default {};
}

执行类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class EmailValidatorImpl implements ConstraintValidator<ValidEmail, String> {

private static String EMAIL_PATTERN = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
private Pattern pattern;
private Matcher matcher;

@Override
public void initialize(ValidEmail annotation) {
    pattern = Pattern.compile(EMAIL_PATTERN, Pattern.CASE_INSENSITIVE);
}

@Override
public boolean isValid(String email, ConstraintValidatorContext context) {
    return isValidEmail(email);

}

private boolean isValidEmail(String email) {
    CharSequence emailstr = email;
    matcher = pattern.matcher(emailstr);
    return matcher.matches();
}

}

现在我想构建一个"uniqueEmail“注释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class UniqueEmailValidatorImpl implements ConstraintValidator<UniqueEmail, String> {

private UserServices userServices;

@Override
public void initialize(UniqueEmail annotation) {
    this.userServices = annotation.getUserServices();
}

@Override
public boolean isValid(String email, ConstraintValidatorContext context) {
    return isUniqueEmail(email);

}

private boolean isUniqueEmail(String email) {
    try {
        userServices.findByEmail(email);
    } catch (UserDoesNotExistException e) {
        return true;
    }
    return false;

}

}

因为我遵循IoC (使用Spring),所以我真的不喜欢在初始化方法中直接创建用户服务层的实例。你建议怎么解决这个问题?注释可以引用实例吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public void initialize(UniqueEmail annotation) {
    this.userServices = annotation.getUserServices();
}

如有任何建议,将不胜感激。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-16 13:49:22

通常,我不建议在您的验证器中使用您的服务(对于MVC和没有副作用)。既然您使用Spring,为什么不注入您的服务呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
public void setUserService(final UserServices userServices) {
    this.userServices = userServices
}
票数 1
EN

Stack Overflow用户

发布于 2014-12-16 13:48:09

您应该直接注入userServices依赖项。根据项目的结构,这要么是自动创建的,要么是构造函数注入的,或者是setter注入的。

以另一种方式执行该操作是的更严格限制,因为注释要求它们中的所有设置都是编译时常量,因此无论如何只能在其中包含StringClass对象,并且必须通过反射实例化所关心的对象。用Spring来做这件事更有意义。

此外,您的实际验证方法是可疑的。我希望findByEmail应该通过电子邮件返回数据库中的用户,即boolean。以这种方式使用try...catch似乎不合适,而且效率很低,因为您的验证程序可能会经常被调用。

票数 1
EN

Stack Overflow用户

发布于 2014-12-16 13:48:30

你为什么不直接注射UserServices

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
private UserServices userServices;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27514451

复制
相关文章
Nginx 不能访问 (找不到)Django 静态文件的原因
django 部署模式为 debug = False(debug = True 找不到静态文件基本是配置错误,去详细检查 settings.py 里的 STATIC_URL、STATICFILES_DIRS 配置)
卓越笔记
2023/02/18
3.1K0
Nginx 不能访问 (找不到)Django 静态文件的原因
gitblit 外网不能访问
Google Chrome 默认非安全端口列表,虽然以上方法可以解决问题,但建议尽量避免以下端口:
2019/03/29
7.9K0
gitblit 外网不能访问
redis非本地不能访问
访问redis数据库,使用redis-cli -h ip -p port无法连接。查了以后发现是redis配置问题。  首先,停止redis服务。  然后,修改redis.conf文件,将其中的bind 127.0.0.1注释掉,同时将protected-mode yes改为no。  最后,重启redis。  问题解决。
似水的流年
2019/12/06
3.1K0
Django 限制访问频率
最近做了一个系统由于部分接口需要进行耗时操作,因而不希望用户进行频繁访问,需要进行访问频率限制。如果要自己实现一个访问限制功能相对来说也不会太复杂,并且网上有各种代码可以参考。如果自己不想实现这个代码可以使用 Django Ratelimit 。
obaby
2023/02/24
1.4K0
本地IP可以访问 外网IP 不能访问网站
https://jingyan.baidu.com/article/624e74590da64d34e8ba5aa0.html
用户6158975
2019/09/04
10.9K0
OpenStack Pike dashboard noVNC 不能访问
现象:openstack dashboard novnc不能查看,报Failed to connect to server (code: 1006)错误
后端云
2018/10/24
2.6K0
再谈《Django 限制访问频率》
之前提到使用ratelimit来限制访问频率,我的目的是根据用户来限制访问频率,但是实际上通过下面的代码并没有达到效果,如果用多个浏览器进行同时刷新,会存在跳过限制的情况
obaby
2023/02/24
9730
如何设置电脑不能访问公网但是能够访问内网
方法: 删除本地路由 手动添加只能访问内网的路由 首先查看本地路由 打开cmd 输入 ipconfig /all 通常默认网关对应的路由即是默认路由
我是李超人
2020/08/21
4.4K0
如何设置电脑不能访问公网但是能够访问内网
win8不能解析DNS导致不能访问外网问题
win8不能解析DNS导致不能访问外网问题     win8系统以前都可以正常上网,早上发现不能访问外网问题,内网可以访问。找运维同事查看后,发现是DNS不能解析问题,这个问题可能是win8自身的bu
闵开慧
2018/04/02
4.5K0
win8不能解析DNS导致不能访问外网问题
Django 实现统计网站访问状态
网站访问状态统计(饼状图): 统计Web容器的日志数据,并通过饼状图将访问状态统计出来,例如404状态.
微软技术分享
2022/12/28
9850
Django配置runserver实现远程访问
如果是在另一台电脑上web访问要用 python manage.py ip:port (一般使用8000)的形式;监听所有ip用0.0.0.0如下:
Devops海洋的渔夫
2019/05/30
2.4K0
Sftp只允许用户访问指定的目录,不能访问其他目录
在一些生产环境中,有时,用户需要传数据到服务器,但是配置ftp服务比较麻烦,此时,我们可以为用户创建sftp账户,让用户使用sftp来上传下载所需的数据。Sftp账号即为系统账号,将账户密码给用户,用户除了能登录sftp上传下载数据外,还可以访问系统中的其他目录,由此,给我们的系统带来了安全隐患,再次,我们需要配置用户只能通过sftp登录系统下载上传所需的数据。
joshua317
2021/01/13
11.1K1
Django之views视图函数
views视图函数属于MTV中逻辑处理的部分 视图函数包含着两个对象,HttpRequest对象和HttpResponse对象
py3study
2020/01/19
9360
k8s service不能访问排错
对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作。如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希望这份文档能帮助您找出问题所在。
iginkgo18
2021/06/22
1.5K0
k8s service不能访问排错
对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作。如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希望这份文档能帮助您找出问题所在。 ​
iginkgo18
2022/05/09
2.2K0
k8s service不能访问排错
Django实现统计网站访问次数、访问 ip 、受访页面
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
7.4K1
框架篇-Django博客应用-访问文章
3.Blog.objects.get 是 django 中封装的对数据库的操作,此处用于获取指定文章内容。
小团子
2019/07/18
6610
框架篇-Django博客应用-访问文章
云服务器uwsgi内网访问但外网不能访问的解决
按照网上的教程配置uwsgi,内网可以正常访问,但是外网不通。教程很多,但都没有提到外网不通的坑。这里随便贴一个https://cloud.tencent.com/developer/article/1563400
用户9227809
2021/11/26
14.5K0
django Throttling 节流 限制接口访问次数
限制类似于权限,因为它确定是否应该授权请求。Throttles表示临时状态,用于控制客户端可以对API发出的请求的速率。
Autooooooo
2020/11/09
1.6K0
点击加载更多

相似问题

在django测试客户端中访问raw_post_data

24

Django中的raw_post_data解码问题

13

使用Django将raw_post_data保存为FileField

10

Django "render“不能访问Pylance

1222

Django - Javascript不能访问DOM?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文