webservice向服务端传递字符串数组

本文介绍了在WebService中遇到无法直接传递String数组作为参数的问题,通过将String数组转换为自定义类StringVo并使用@XmlRootElement注解成功解决了异常。在服务端接口中,接收自定义类型StringVo[]来实现批量删除IP的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.功能是在webservice的客户端向服务端传一个字符串数组作为参数,批量删除ip
2.但是直接用String[] ids传递的话会报异常:No message body writer found for response class : L.String[]或者之类的。后换成List<String> ids也不行,报异常:No message body writer found for response class :ArrayList
3.于是把String[] ids包装在一个自定义的类里,还是报相同的异常。
4.于是把String包装了一层变成StringVo,并加注释 @XmlRootElement 此问题得以解决
5.另外:如果用get方法传递的话肯定不行?没有尝试。
6.如果想用Arraylist直接传值的话,可参考自定义一个message provider。



在IpPoolService.java中传入ip的id数组:
@Override
         public   String delAllIp(String[] ids, String callType) {
                          //String[] to StringVo[]
            StringVo[] idsVo = parseStringToStringVo(ids);
               try   {
                        String url =   "/iaasresource/ip/delete" ;
                              WebClient cloudosClient = WebClientFactory.getWebClient();
                              Result result = cloudosClient.back( true   ).path(url)
                                          .accept(MediaType.   APPLICATION_XML )
                                          .type(MediaType.   APPLICATION_XML )
                                          .post(idsVo,Result.   class );
                              
                                 if (result. resultCode   == Result. SUCCESS_CODE   ){
                                       return   "1"   ;
                              }   else   if   (result. resultCode   == Result. ERROR_CODE   ){
                                       return   "0"   ;
                              }
                              
            }   catch   (Exception e) {
                     //rtn = "批量删除IP失败," + e.getMessage();
                     logger .error(e.getMessage());
                     return   "-1"   ;
            }
               return   "0"   ;
      }

parseStringToStringVo方法如下:
         private   StringVo[] parseStringToStringVo(String[] ids) {
            StringVo[] ipsVo =   new   StringVo[ids. length   ];
            
               for ( int   i=0;i<ids. length ;i++){
                  ipsVo[i] =   new   StringVo();
                  ipsVo[i].setSrc(ids[i]);
            }
            
               return   ipsVo;
      }

StringVo类如下:
import   javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public   class   StringVo   implements   Serializable{   
      String   src ;
         public   String getSrc() {
               return   src   ;
      }
         public   void   setSrc(String src) {
               this . src   = src;
      }
}

webservice端接口如下:
         //删除ip
         @WebMethod
         @POST
         @Path ( "/ip/delete"   )
         public   Response deleteIp(StringVo[] ipids);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值