java - 以列表为数据参数的 HTTP Post 请求
问题描述
我正在尝试编写一个自动化测试用例来验证服务,该服务接受列表作为 http 正文/数据参数。当我通过浏览器执行此操作时,它按预期工作(以下是成功请求的卷曲)
curl 'https://mytest.org.com/admin/addValue' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0' -H 'Accept: application/json' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Content-Type: application/json' -H 'CSRF_TOKEN: 18243bk3lu8hakfosidu56b40de4356dkm3u643j0e2ldcsc85si' -H 'Connection: keep-alive' -H 'Cookie: dslang=US-EN; ac9-at=Nq41QacCjw2tdOUBw6aKlq/yybAARv9GvFe/F; geo=US; cpl=Dsuy09ercyiX9MfjSvjDKPq45Qgqe+0gp81c4DFb000=' --data '[{"label":"MultiValueId","value":"California","instanceId":2049}]'
虽然,当我尝试使用我的自动化套件时,值并没有按预期保存 -
HttpPost httppost = new HttpPost("https://mytest.org.com/admin/addValue");
httppost.addHeader(HttpHeaders.CONNECTION, "keep-alive");
httppost.addHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7");
httppost.addHeader(HttpHeaders.ACCEPT, "application/json");
httppost.addHeader(HttpHeaders.ACCEPT_ENCODING, "gzip,deflate,br");
httppost.addHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-us");
httppost.addHeader(HttpHeaders.CONTENT_TYPE, "application/json");
httppost.addHeader("CSRF_TOKEN", MyConstant.CSRF_TOKEN);
httppost.addHeader("Cookie", MyConstant.cookie);
ArrayList<NameValuePair> valParameters=new ArrayList<NameValuePair>();
valParameters.add(new BasicNameValuePair("label", "MultiValueId"));
valParameters.add(new BasicNameValuePair("value", "California"));
valParameters.add(new BasicNameValuePair("instanceId", "2049"));
List postParameters=new ArrayList<Object>();
postParameters.add(valParameters);
httppost.setEntity(new UrlEncodedFormEntity(postParameters, "UTF-8"));
httppost.setHeader("Content-type", "application/json");
System.out.println(httppost.toString());
HttpResponse resp = HttpsSSLClient.createSSLInsecureClient().execute(httppost);
System.out.println("Response --> " + resp.toString()+resp.getEntity());
System.out.println("Response Entity--> " + resp.getEntity());
以下是 http post 数据参数 -
[{"label":"MultiValueId","value":"DEF","instanceId":2049},{"label":"MultiValueId","value":"GHI","instanceId":2049}]
另外,我知道下面是在应用程序端编写服务的方式,即它接受列表作为参数 -
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/addValue")
public ValueUploadResponse addLabelValue(List<GenericUXData> fieldList) {
ValueUploadResponse response = new ValueUploadResponse();
List<GenericUXData> savedValues = new ArrayList<GenericUXData>();
List<GenericUXData> errorValues = new ArrayList<GenericUXData>();
if (fieldList == null || fieldList.size() < 1) {
response.setErrorMessage("No Field List Found");
return response;
}
......
......
......
请建议如何实现这一目标。
解决方案
推荐阅读
- python - 操作数不能一起广播
- maven - Maven 不可解决的父 POM 问题
- amazon-web-services - AWS S3,无法添加存储桶策略,出现“拒绝访问”错误
- python - 如何选择 JSON 对象并将其分配给烧瓶中的 html 下拉列表?
- c++ - 如何全局声明一个可变长度的 std::array 并在它有 std::string 作为成员时获取它的大小
- symfony - 为什么 Travis-CI 和 composer 在 clear:cache (Symfony) 期间执行查询
- javascript - 如何在jsPDF中设置线宽?
- java - JavaFX observableList 作为 Map 中的值
- javascript - 这段代码如何在数组中搜索多个值?
- go - 为什么没有 sync.WaitGroup、sync.Mutex 引用类型,如通道、切片?