有类似的链接,但我找不到任何适合我的解决方案,所以我想知道是否有人可以为我的方案提供一个有效的示例。我正在做ajax从服务器端检索数据,所以我可以在客户端动态创建图表。我需要包含MappingJacksonHttpMessageConverter吗?如果那个答案可以有人提供一个例子我可以遵循吗?
爪哇:
@RequestMapping(value="/getReportData.html", method=RequestMethod.GET, produces="application/json")
public @ResponseBody Reports getReport1Data(HttpServletRequest request)
{
System.out.println("Report 1 Page GET Method");
ModelAndView mv = new ModelAndView("report1");
if((Reports)request.getSession().getAttribute(USER_SESSION_REPORTS) != null){
reports = (Reports)request.getSession().getAttribute(USER_SESSION_REPORTS);
System.out.println("--------> Report 1 Page with session data");
return reports;
}
else{
System.out.println("--------> Report 1 Page with NO session data");
}
mv.addObject("report1", reports.getReport1());
return null;
}
使用Javascript:
function getData(){
$.ajax({
url: "getReportData.html",
type: "GET",
contentType: "application/json",
dataType: JSON,
success: function(report1){
console.log("success: " + report1.utilRatio.decRatio);
},
error: function(report1){
console.log("error: " + report1.utilRatio.decRatio);
}
});
}
响应标题: 内容语言:" zh", 内容长度:" 1110" 内容类型:" text / html; charset = utf-8" 服务器:" Apache-Coyote / 1.1"
请求标题: 接受:" / " 接受语言:" en-US,en; q = 0.5" 接受编码:" gzip,deflate" 内容类型:" application / json" X-Requested-With :" XMLHttpRequest"
答案 0 :(得分:1)
看起来您的请求标头有误。您可以删除contentType设置,因为您没有将数据发送到服务器并将dataType更改为字符串值" json"而不是变量JSON。
此外,您的回复标头错误。只需确保您始终返回Reports对象。并且您可能希望从该端点删除html扩展名,因为您只是返回一个对象。
答案 1 :(得分:0)
spring使用@ResponseBody注释来返回数据,因为json .it会隐式调用MappingJacksonHttpMessageConverter。所以你需要使用它。
@RequestMapping(value = "/getjson", method = RequestMethod.POST, produces = "application/json")
@Transactional
public void getJson(HttpServletRequest request, HttpServletResponse response, @RequestParam("type") String type)
throws DatatypeConfigurationException, IOException, JSONException {
JSONObject json = new JSONObject();
Map<String, String[]> parameterMap = request.getParameterMap();
List<Chart> chart=myService.getChart();
if (Chart.size()>0) {
json.put("status", "SUCCESS");
JSONArray array = new JSONArray();
for (Chart chartData: chart) {
JSONObject object = new JSONObject();
object.put("id", chartData.getRaasiId());
object.put("name", chartData.getName());
array.put(object);
}
json.put("options", array);
}
}
}
response.setContentType("application/json");
System.out.println("response======" + json.toString());
PrintWriter out = response.getWriter();
out.write(json.toString());
}
============ 在html上
jQuery
.ajax({
url : controllerUrl,
dataType : 'text',
processData : false,
contentType : false,
type : 'GET',
success : function(response) {
success : function(response) {
marker = JSON.stringify(response);
json = jQuery.parseJSON(marker);
json = JSON.parse(json);
alert(json.status);
}
});
供参考: https://rwehner.wordpress.com/2010/06/09/2-ways-to-create-json-response-for-ajax-request-in-spring3/