有个需求是这样:
1、开发个webservice服务端的接口
2、因为需要传入的参数过多,因此想到用map来解决。把需要的参数属性名定义为map的key,而value才是我需要的值。比如
   正常情况是这样定义:   public void method(String name,String password);
   但是我现在要这样定义: public void method(Map<String,String> parm);
     此map参数的key我只能允许客户定义为name,password.而value当然可以是任意String。
3、基于此最好是用枚举来定义:public enum MemberDetail {
   name,password
}   因此我需要的接口就定义为
   public void method(Map<MemberDetail ,String> parm);
但是这样出问题了。。测试的时候发现客户端传入的map参数的key完全没有被枚举给控制。我要怎么才能使客户只能穿服务端定义的枚举类型呢?

解决方案 »

  1.   

    webservice 尽量保证只串简单的 字符串或者数字 日期,其他的类型还是别传了,传了也不一定通用
      

  2.   

    你在webservice里面直接无视这些不对的参数不就好了?
    所谓协议,肯定要定义一些标准值。
      

  3.   


    因为这里的key都是数据库对应的字段。需要insert进去。
    并且字段很多,差不多有50来个,又有30来个字段是必须的。因此我只想到这个方法来控制了。我现在就是不知道我这样是否可行。
      

  4.   

    干吗这样传
    做成一个bean来传不是更清晰
      

  5.   


    完全可以实现。但是这样有个缺点,我不是用的hibernate,用的jdbc,这样我还是得去拼50来个字段。从代码上来说不是很完美哦。
    不过谢谢你提供的思路,硬是没办法我就按你的来咯
      

  6.   

    用反射不就完了
    反正是bean,里面的成员变量不就是你的数据库名-值对
    反射出一个成员变量的名称,对sql里的同名字段赋值,一个循环就搞定了
      

  7.   

    看你JavaBean的绑定方式是否支持枚举的数据类型
    由于绑定的方式比较多,建议去百度下资料,毕竟不常用,建议你还是拼成xml样式的string来做参数,通用,简单。
      

  8.   

    刚开始用bean实现了,也是用发射去拼接。这里有个问题。因为JavaBean中的属性都是privare的。要取得属性值得去找到它的get方法,繁琐。后来发现,只要在getDeclaredFields后,遍历出Field。调用Field中的setAccessible(true);就能直接通过Field中的get方法获取属性值。不必再去反射出bean中的get方法了。不过最后我还是改用了11楼的xml方式。通用、安全、简单!谢谢啦