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等调用好像是有这个参数来定制编码格式的啊
Global site tag (gtag.js) - Google Analytics