Servlet 如何给前端响应 Json 数据?
这是我原先的代码
js代码
$.get('http://localhost:8080/raxly-original/page?id=1', function(res) { console.log(res);
})
Servlet 代码
@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
String id = request.getParameter("id");
if (id != null) {
Page resultPage = pageService.getById(Integer.valueOf(id));
PrintWriter writer = response.getWriter();
writer.print(resultPage); // print一个普通实体, 前端接收后是一串字符串
writer.flush();
writer.close();
}
}
然后自己改良了一下, 就是在前端手动把String转成json, 代码如下
$.get('http://localhost:8080/raxly-original/page?id=1', function(res) { console.log(JSON.parse(res));
})
@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
String id = request.getParameter("id");
String responseContent = null;
if (id != null) {
Page resultPage = pageService.getById(Integer.valueOf(id));
// { "pageId":"%s", "pageName":"%s" }
responseContent = String.format("{ \"pageId\":\"%s\", \"pageName\":\"%s\" }", resultPage.getPageId(), resultPage.getPageName());
PrintWriter writer = response.getWriter();
writer.print(responseContent);
writer.flush();
writer.close();
}
}
有没有更优的方案?
可以实现后端直接传对象, 前端自动解析成json的?
回答:
用jackson, Gson, fastjson等, 把对象转成json字符串, 写到输出 流, 再加个header content-type: application/json
就行.
别听那些说什么用spring的. 用spring当然 好. 但你要求用servlet, 就是答非所问.
回答:
更优方案是上springmvc,@ResponseBody
@RequestBody
全搞定
建议一步到位spring-boot
servelt+jquery,你说现在是2012年我都信……
回答:
这个问题提的不好
可能只是一个小小的功能, 需要成千上万的代码
- Spring框架集成了Jackson
- Content-Type: application/json 需要设置响应头为application/json
最终结论还是使用框架实现
用Controller
单纯依靠Servlet可能实现不了前后端分离的项目, 除非自己写定义注解, 没有必要
回答:
得到resultPage对象后,这样输出下,下面用的是hutool的json工具包
response.setContentType("text/json;charset=UTF-8");response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String str =JSONUtil.toJsonStr(resultPage);
out.println(str);
out.flush();
out.close();
以上是 Servlet 如何给前端响应 Json 数据? 的全部内容, 来源链接: utcz.com/p/944701.html