我正在使用Netbeans& spring framework4.0.1,没有注释只有普通模型& view
当我尝试将JSON发送到jsp页面&使用ajax函数回调,我无法解析响应文本,给我这个错误 " SyntaxError:JSON.parse:JSON数据第12行第1列的意外字符" 这是控制器代码
public ModelAndView contentlistObjective(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {
ModelAndView mv = new ModelAndView("createsettings");
List<Content> contents = new ArrayList<>();
// JSONObject obj = new JSONObject();
try {
DriverManagerDataSource dataSource;
dataSource = (DriverManagerDataSource)this.getBean("dataSource",hsr.getServletContext());
this.cn = dataSource.getConnection();
Statement st = this.cn.createStatement();
String objectiveid = null;
objectiveid = hsr.getParameter("seleccion3");
ResultSet rs1 = st.executeQuery("SELECT name,id FROM public.content where public.content.id IN (select public.objective_content.content_id from public.objective_content where public.objective_content.objective_id = "+objectiveid+")");
while (rs1.next())
{
Content eq = new Content();
contents.add(eq);
// obj.put("name", rs1.getString("name"));
}
} catch (SQLException ex) {
System.out.println("Error leyendo contents: " + ex);
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(contents);
hsr1.setContentType("application/json");
// System.out.print(json);
// json = json.replaceAll("\n", "");
// json = json.trim();
// json = json.substring(1,json.length()-1);
// json = json.replace("\\","");
mv.addObject(json);
return mv;
}
当我调试我返回的json时有这个值 [ { &#34;姓名&#34;:&#34;报纸&#34; }, { &#34; name&#34;:&#34;小说&#34; } ] 以下是JSP代码
function comboSelectionObjective()
{
if (window.XMLHttpRequest) //mozilla
{
ajax = new XMLHttpRequest(); //No Internet explorer
} else
{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
ajax.onreadystatechange = funcionCallBackContent;
var seleccion3 = document.getElementById("objective").value;
ajax.open("GET", "createsetting.htm?select=contentlistObjective&seleccion3=" + seleccion3, true);
ajax.send("");
}
function funcionCallBackContent()
{
if (ajax.readyState === 4) {
if (ajax.status===200){
var data =JSON.parse(ajax.responseText);
console.log(data);
}
我正在使用gson库,我之前使用Json简单,但它给出了完全相同的错误 我也试图替换所有转义字符,但也没有工作
问题是我没有使用注释吗?
感谢您的帮助
答案 0 :(得分:0)
您需要返回json字符串而不是ModelAndView
对象。
在addOjbect
对象上调用方法ModelAndView
时,您正在做的是向模型添加或覆盖属性。
返回ModelAndView
你基本上返回一个字符串,其中包含你想要显示的视图名称,所以你要返回一个html页面,而不是一个json对象。
您需要做的是返回一个json字符串。所以它应该是这样的:
@ResponseBody
public String contentlistObjective(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {
.... your code
hsr1.setContentType("application/json");
//You should double check before returning. Just an example.
return gson.toJson(contents);
}
Mapping the response body with the @ResponseBody annotation
@ResponseBody注释[...]可以放在方法上 表示返回类型应直接写入HTTP 响应主体(不放在模型中,或解释为视图 名称)。
如果您根本不想使用任何anotation并采用旧式方式,则必须将json内容直接放在响应输出中。类似的东西:
String json = new Gson().toJson(contents);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
我希望你明白这一点。