【问题标题】:Python web service pasiing arraylistPython Web服务传递arraylist
【发布时间】:2021-05-07 16:19:27
【问题描述】:

我想用 python 编写一个 web 服务,它从另一个用 Java 编写的 web 服务获取数据。

我想从服务中获取数据的方法是 public List programsByIdList(List IdList):

DtoIdName 是一个类,有两个值; id(Long) 和 name(String)

这个 Web 服务是用 Java 编写的,所以 List 是 Java.util.List ...

当我在 python 中编写 web 服务时,它是这样的......

import requests
import json
from bs4 import BeautifulSoup as bs 
import flaskfrom 
flask import Flask, jsonify
from flask import make_response
from flask import requestimport xmltodict

TEST = 'http://192.166.5.0/YService/RadioService/'

app = flask.Flask(__name__)
app.config["DEBUG"] = True
headers = { 
     'Accept': 'application/xml',
}

#programsByIdList
@app.route('/programsByIdList', methods=['GET'])

def programsByIdList(): 
idList= [10262,10498] 
arguments = {'arg0[]': idList}

print(arguments) 
response = requests.get(TEST+'programsByIdList',headers=headers, params=arguments) 
soapXML = response.content.decode("utf-8") 
soapSoup =bs(soapXML, "xml") 
programNames = soapSoup.find_all('name') 
data = response 
xpars = xmltodict.parse(data.text) 
json1 = json.dumps(xpars,indent=4,ensure_ascii=False) 

for ad in programNames: 
    print(ad.get_text()) 
    return json1

@app.route('/', methods=['GET'])
def home(): 
    return "<h1>Service</h1><p> Service methods.</p>"

print(programsByIdList())
app.run()

当我运行我的 python 代码时,它显示 { "soap:Envelope": { "@xmlns:soap": "http://schemas.xmlsoap.org/soap/envelope/", "soap:Body": { "soap:Fault": { "faultcode": "soap:Server", "faultstring": "调用公共抽象 java.util.List eradyo.akis.service.AkisService.programsBySezonIdList(java.util.List) 时参数类型不匹配) 带有参数 [10262]。” } } } }

我认为我对使用 java.List 参数编写的 python 服务感到困惑...有没有办法解决我的问题...如何将 Arraylist 传递给 python 请求..

非常感谢……

【问题讨论】:

  • 能否请您复制/粘贴您的真实代码(我的意思是没有后期编辑)?
  • 嗨,我在上面发布了我的python代码,我不明白是哪个代码...你的意思是我想要获取请求的java Web服务代码...

标签: python web arraylist service arguments


【解决方案1】:

这是我用 Java 编写并在 Apache Web 服务器中工作的 Web 服务代码...

'''

public List<DtoIdName> programsByIdList(List<Long> sezonIdList) 
{
    HashMap<Long, String> sezonProgramMap = programDao.getProgramsBySezonIdList(sezonIdList);

    List<DtoIdName> sezonProgramList = new ArrayList();

    for (Long key : sezonProgramMap.keySet()) {
        sezonProgramList.add(new DtoIdName(key, sezonProgramMap.get(key)));
    }

    return sezonProgramList;
}

'''

这是我请求此方法的python代码...

 import requests
 import json
 from bs4 import BeautifulSoup as bs 
import flaskfrom 
flask import Flask, jsonify
from flask import make_response
from flask import requestimport xmltodict

TEST = 'http://192.166.5.0/YService/RadioService/'

app = flask.Flask(__name__)
app.config["DEBUG"] = True
headers = { 
 'Accept': 'application/xml',
}

#programsByIdList
@app.route('/programsByIdList', methods=['GET'])

def programsByIdList(): 
idList= [10262,10498] 
arguments = {'arg0[]': idList}

 print(arguments) 
response = requests.get(TEST+'programsByIdList',headers=headers, params=arguments) 
soapXML = response.content.decode("utf-8") 
soapSoup =bs(soapXML, "xml") 
programNames = soapSoup.find_all('name') 
data = response 
xpars = xmltodict.parse(data.text) 
json1 = json.dumps(xpars,indent=4,ensure_ascii=False) 

for ad in programNames: 
    print(ad.get_text()) 
    return json1

@app.route('/', methods=['GET'])
def home(): 
return "<h1>Service</h1><p> Service methods.</p>"

print(programsByIdList())
app.run()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多