博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
淘宝SOA框架dubbo学习(4)--参数验证
阅读量:6591 次
发布时间:2019-06-24

本文共 3764 字,大约阅读时间需要 12 分钟。

hot3.png

开始,先说一句,还是用maven的好

1、由于没用maven,和对dubbo不是很了解的原因,这次,总因为jar包不对,而导致:dubbo客户端程序,启动不起来

所以决定:将原来用过的所有jar包全部去,将dubbo-demo-provider-2.5.4-SNAPSHOT/lib下的所有jar包全部导入项目中

一切就OK了

2、服务消费者代码

import java.util.Set;import javax.validation.ConstraintViolation;import javax.validation.ConstraintViolationException;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.dubbo.demo.ValidationParameter;import com.alibaba.dubbo.demo.ValidationService;import com.alibaba.dubbo.rpc.RpcException;public class Consumer {    /**     * @param args     * @throws Exception     */    public static void main(String[] args) throws Exception {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(                new String[] { "classpath:consumer.xml" });        context.start();        // DemoService demoService = (DemoService)        // context.getBean("demoService");        // while (true) {        // String hello = demoService.sayHello("world");        // System.out.println(hello);        //        // Thread.sleep(100);        // }        ValidationService validationService = (ValidationService) context.getBean("validationService");        while (true) {            ValidationParameter parameter = new ValidationParameter();            parameter.setAge(2);            parameter.setEmail("han@qq.com");            try {                String result = validationService.intsert(parameter);                System.out.println(result);            } catch (RpcException e) { // 抛出的是RpcException                ConstraintViolationException ve = (ConstraintViolationException) e.getCause(); // 里面嵌了一个ConstraintViolationException                Set
> violations = ve.getConstraintViolations(); // 可以拿到一个验证错误详细信息的集合                System.out.println(violations);            }        }    }}

3、服务消费者配置文件

     
    
     
    
     
    
     
    
 

注:重点关注一下,带有下面信息的那一行,就OK了,此处表明,是在客户端侧进行参数验证

validation="true"

4、服务提供者配置文件

     
    
     
    
     
    
     
    
     
    
     
    
     
    
 

5、服务消费者和提供者共用的类和接口

package com.alibaba.dubbo.demo;public interface ValidationService {    @interface Intsert {    }    String intsert(ValidationParameter parameter);}

package com.alibaba.dubbo.demo;import java.io.Serializable;import javax.validation.constraints.Max;import javax.validation.constraints.Min;import javax.validation.constraints.Pattern;public class ValidationParameter implements Serializable {    private static final long serialVersionUID = 3469571402386167794L;    @Pattern(regexp = "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$")    private String email;    @Min(18)    // 最小值    @Max(100)    // 最大值    private int age;    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

6、服务提供者接口实现类

package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.demo.ValidationParameter;import com.alibaba.dubbo.demo.ValidationService;public class ValidationServiceImpl implements ValidationService {    @Override    public String intsert(ValidationParameter parameter) {        return parameter.getEmail() + "==" + parameter.getAge();    }}

7、运行客户端程序时,控制台会输出以下信息:

[ConstraintViolationImpl{interpolatedMessage='最小不能小于18', propertyPath=age, rootBeanClass=class com.alibaba.dubbo.demo.ValidationParameter, messageTemplate='{javax.validation.constraints.Min.message}'}]

8、OK,此时已经可以验证,参数验证已经开始起作用了。

转载于:https://my.oschina.net/hanshubo/blog/377238

你可能感兴趣的文章
第二阶段冲刺第八天,6月7日。
查看>>
java的左移位(<<)和右移位(>>)和无符号右移(>>>)
查看>>
struts2 action 返回类型分析
查看>>
【原创】FPGA开发手记(三) PS/2键盘
查看>>
linux统计多个文件大小总和
查看>>
java基础-Eclipse开发工具介绍
查看>>
JS常见的字符串操作
查看>>
洛谷P1069 细胞分裂 数学
查看>>
JAVA中的编码分析
查看>>
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
document.all用法
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
underscore 1.7.0 api
查看>>
C# CheckedListBox控件的使用方法
查看>>