Servlet 如何给前端响应 Json 数据?

这是我原先的代码

js代码

$.get('http://localhost:8080/raxly-original/page?id=1', function(res) {

console.log(res);

})

Servlet 代码

@Override

protected 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));

})

@Override

protected 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年我都信……


回答:

这个问题提的不好

可能只是一个小小的功能, 需要成千上万的代码

  1. Spring框架集成了Jackson
  2. 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

回到顶部