java調用webservice接口,Jersey Restful WebService 接收 JSON 數組 對象

 2023-12-06 阅读 27 评论 0

摘要:為什么80%的碼農都做不了架構師?>>> ?? 在使用 jersey restful 時 前端ajax post 數據到 服務器端,接收對象為null,測試代碼 web: var ts = [];//模擬兩條數據for (var i = 0; i < 2; i++) {ts.push({name:'name'&

為什么80%的碼農都做不了架構師?>>> ??hot3.png

在使用 jersey restful 時 前端ajax post 數據到 服務器端,接收對象為null,測試代碼

web:

	var ts = [];//模擬兩條數據for (var i = 0; i < 2; i++) {ts.push({name:'name'+i,id:i});}var testData = {aa:ts};printLog('log',testData);$.rate.post({url: hostUrl + '/xxx/xxx/xxxx/queryDepartmentsAll',data:testData,cache: false,objRest:false,success: function(data) {console.log(data);}});

post data:

--- log ---
{"aa":[{"name":"name0","id":0},{"name":"name1","id":1}]}

server:

	/*** 查詢所有科室* @return* @throws Exception*/@POST@Path("/queryDepartmentsAll")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)public String queryDepartmentsAllTest(@Form(prefix="aa")List<TestBean> beans) throws Exception { loggin.info(beans);return "test...";}

java調用webservice接口,TestBean:

@XmlRootElement
public class TestBean {@FormParam("name")private String name;@FormParam("id")private Integer id;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}}

有請?"debug "?出場.......

?ajax發出請求后 會經過 HttpServletInputMessage 處理,獲取表單帶的參數

調用getDecodedFormParameters,會把 url中的參數和表單參數合并,放入MultivaluedMapImpl 對象中

MultivaluedMapImpl點toString - -->?{aa[1][id]=[1], aa[0][name]=[name0], aa[0][id]=[0], aa[1][name]=[name1]}

java接口接收json數據?往下走,到了ListFormInjector

form 注入器有兩種,List,Map

最終走到了PrefixedMultivaluedMap 類

Java怎么接受一個數組?對象注入的方式是通過“變量[0].屬性” 注入的,而前段傳進的值是

解決辦法:

把花括號改成“ .” 就可以注入了

修改后:

aa[0].id=0
aa[0].name=name0
aa[1].id=1
aa[1].name=name1

后端接收到了

mybatis接收數組?

====================================================================

jquery ajax data 如果對象中包涵數組,是使用?jQuery.param 函數格式化,所以導致 傳輸的數據格式不正確

jQuery.param = function( a, traditional ) {var prefix,s = [],add = function( key, value ) {// If value is a function, invoke it and return its valuevalue = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );};// Set traditional to true for jQuery <= 1.3.2 behavior.if ( traditional === undefined ) {traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;}// If an array was passed in, assume that it is an array of form elements.if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {// Serialize the form elementsjQuery.each( a, function() {add( this.name, this.value );});} else {// If traditional, encode the "old" way (the way 1.3.2 or older// did it), otherwise encode params recursively.for ( prefix in a ) {buildParams( prefix, a[ prefix ], traditional, add );}}// Return the resulting serializationreturn s.join( "&" ).replace( r20, "+" );
};

可以在請求前把data類型先處理,demo js


var datas = {};
for (var a in settings.data) {if ($.isArray(settings.data[a])) {var isObject = $.isPlainObject(settings.data[a][0]);//如果數組里是對象if (isObject) {for (var i = 0, ds = settings.data[a], len = ds.length; i < len; ++i) {for (var b in ds[i]) {datas[a + '[' + i + '].' + b] = ds[i][b];}}}} else {//datas[a] = settings.data[a];}
}

?

轉載于:https://my.oschina.net/shking/blog/691366

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/189878.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息