rop中文问题
xukong
2013-01-04
在测试ROP自带的例子rop-sample时,没有使用中文参数时,一切正常,
使用中文参数后,发现几个问题,特询问下: 一、 public class LogonRequest extends AbstractRopRequest{ @Pattern(regexp = "\\w{1,30}") private String userName; @IgnoreSign @Pattern(regexp = "\\w{1,30}") private String password; 有@Pattern注释时,password参数传中文会报错 //②构造请求对象 LogonRequest ropRequest = new LogonRequest(); ropRequest.setUserName("tomson"); ropRequest.setPassword("密码"); ropRequest.setReqId(1000); //③对服务发起调用并获取响应结果 CompositeResponse response = ropClient.buildClientRequest().get(ropRequest, LogonResponse.class, "user.getSession", "1.0"); 主错误信息: 代码:33 信息:非法的参数 解决方法:请查看根据服务接口对参数格式的要求 01-04 16:15:33 WARN cmcc.gz.udp.rop.TestRop.createSession(TestRop.java:61): 子错误信息: 子错误代码:isv.invalid-paramete:password 子错误信息:参数password无效,格式不对、非法值、越界等 二,去掉 @Pattern 注释后,password能传中文参数,服务也被正常调用,但是服务器端取得的中文为乱码 @IgnoreSign //@Pattern(regexp = "\\w{1,30}") @NotNull private String password; 客户端调用代码同上 doInSrcThread:24 doInSrcThread:100 use SampleAppSecretManager! use SampleAppSecretManager! beforeService ... request.getPassword() = ?????? beforeResponse ... message(1357287670301)sign=336A35FE44090E02E0102CC78F6C44EC764EC968&reqId=1000&v=1.0&locale=zh_CN&userName=tomson&method=user.getSession&format=xml&password=??????&appKey=00001 message(1357287670154)<HashMap xmlns=""><sign>336A35FE44090E02E0102CC78F6C44EC764EC968</sign><reqId>1000</reqId><v>1.0</v><locale>zh_CN</locale><userName>tomson</userName><method>user.getSession</method><format>xml</format><password>??????</password><appKey>00001</appKey></HashMap> 可以看到在传进来的消息体中中文就已经是乱码了,请问怎样才能正确获得中文参数(@Patten标注也能正确使用)? |
|
stamen
2013-09-02
1.中文的正则表达式必须使用:
//5~10个中文字符 [\u4e00-\u9fa5]{5,10} \w是匹配包括下划线的任何单词字符 具体请参见:http://blog.csdn.net/xiong1000/article/details/674969 所以如果要限制中文字符的长度请直接用@Length(min=x,max=y) 2.我本地的测试是可以的,中文可以绑定以服务端,没有任何问题。你客户端必须是采用UTF-8编码的,否则会发生乱码。 |
|
a123nu123o123
2013-12-27
@stamen: 老大,那你这个没有 charset 这个系统级参数,来制定 编码格式的吗?客户端只能是用utf8吗?我看taobao的API等调用好像是有这个参数来定制编码格式的啊
|