如何解决带有dojo工具包+ Spring Boot Controller的Ajax:使用curl进行测试,来自ajax json响应为空
我正尝试测试通过xhrGet请求列表(在本例中为名称)的视图。我在Spring-Boot基本应用程序中使用Dojo Toolkit(webjars)。
波纹管方法返回卷曲:
curl -i -X GET "http://localhost:8081/the-good-rest/ch3/xhrgame?game=2"
HTTP/1.1 202
Transfer-Encoding: identity
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat,26 Sep 2020 20:35:25 GMT
{"content":{"characters":["Sam","Sony","John","Sheila","Martha","Paul","Britney","Tom","Mark","Bruce"]}}
/*-----------------------------------------------------------------*/
此方法返回一个带有空列表的json对象:
/* This is the method in Controller */
@RequestMapping(value="ch3/xhrgame",consumes= {MediaType.ALL_VALUE},produces= {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<Map<String,CharactersDto<String>>> dojoTraining4(@RequestParam(name="game") int level) {
Map<String,CharactersDto<String>> model = new LinkedHashMap<String,CharactersDto<String>>();
CharactersDto<String> characts = new CharactersDto<String>();
DateFormat df = DateFormat.getDateInstance();
if(level>1)
characts.getCharacters().addAll(new ArrayList<String>(Arrays.asList("Sam","Martha")));
if(level>=2)
characts.getCharacters().addAll(new ArrayList<String>(Arrays.asList("Paul","Bruce")));
if(level>=3)
characts.getCharacters().addAll(new ArrayList<String>(Arrays.asList("Ann","Mary","Rose","James","Anthony")));
model.put("content",characts);
HttpHeaders headers = new HttpHeaders();
headers.put("Content-Type",Arrays.asList("application/json"));
headers.put("Transfer-Encoding",Arrays.asList("identity"));
headers.put("Accept-Charset",Arrays.asList("utf-8));
ResponseEntity<Map<String,CharactersDto<String>>> entity = new ResponseEntity <Map<String,CharactersDto<String>>>(model,headers,HttpStatus.ACCEPTED);
return entity;
}
代码道场: //不过何时从ajax调用:
功能(事件){
var button = dojo.byId("idAdd");
dojo.stopEvent(event);
level = dojo.byId("idLevVal").innerHTML;
var xhrArgs = {
url:"/the-good-rest/ch3/xhrgame?game="+level,content: {"game":level},handleAs: "json",load: function(data){
var d = data.content;
if( d.characters.length>0){
//d.characters.lenght is always 0!!!!!
for(i=0;i<d.characters.length;i++)
names.push( d.characters[i]);
}
},error: function(error){
console.log(error);
dojo.byId("messages").innerHTML = "Names load failed";
},handle: function(ioargs){
console.log("STATUS:" + ioargs);
}
};
dojo.byId("messages").innerHTML= "Loading names...";
var deferred = dojo.xhrGet(xhrArgs);
};
这是我解决问题的方法
//So finally I'm using this implementation
@RequestMapping(value="ch3/xhrgame1",method=RequestMethod.GET,produces= {MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<String> dojoTraining7(@RequestParam(name="game") int level) {
String body = "";
if(level==1)
body = "{\"content\":{\"characters\":[\"Sam\",\"Sony\",\"John\",\"Sheila\",\"Martha\"]}}";
if(level==2)
body = "{\"content\":{\"characters\":[\"Sam\",\"Martha\",\"Paul\",\"Britney\",\"Tom\",\"Mark\"]}}";
if(level>=3)
body = "{\"content\":{\"characters\":[\"Sam\",\"Mark\",\"Bruce\",\"Ann\",\"Mary\",\"Rose\",\"James\",\"Anthony\",\"Priscila\",\"Ellise\",\"Kurt\",\"Daisy\",\"Jack\",\"Russell\"]}}";
HttpHeaders headers = new HttpHeaders();
headers.put("Content-Type",Arrays.asList(MediaType.APPLICATION_JSON_UTF8_VALUE));
headers.put("Accept-Charset",Arrays.asList("UTF-8"));
ResponseEntity<String> entity = new ResponseEntity <String>(body,HttpStatus.OK);
return entity;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。