在这里,我们将给大家分享关于春季:返回@ResponseBody“ResponseEntity>”的知识,让您更了解response返回的是什么的本质,同时也会涉及到如何更有效地@ResponseBo
在这里,我们将给大家分享关于春季:返回@ResponseBody“ ResponseEntity>”的知识,让您更了解response返回的是什么的本质,同时也会涉及到如何更有效地@ResponseBody as the response has already been committed.、@responsebody 返回json、@ResponseBody与response.getWriter .write()区别、@ResponseEntity返回值(怪异)的内容。
本文目录一览:- 春季:返回@ResponseBody“ ResponseEntity>”(response返回的是什么)
- @ResponseBody as the response has already been committed.
- @responsebody 返回json
- @ResponseBody与response.getWriter .write()区别
- @ResponseEntity返回值(怪异)
春季:返回@ResponseBody“ ResponseEntity>”(response返回的是什么)
在控制器中,我创建json数组。如果我List<JSONObject>
还可以的话:
@RequestMapping(value="",method=RequestMethod.GET,produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody List<JSONObject> getAll() {
List<Entity> entityList = entityManager.findAll();
List<JSONObject> entities = new ArrayList<JSONObject>();
for (Entity n : entityList) {
JSONObject entity = new JSONObject();
entity.put("id",n.getId());
entity.put("address",n.getAddress());
entities.add(entity);
}
return entities;
}
但我需要返回JSON数组和HTTP状态代码:
@RequestMapping(value="",produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<List<JSONObject>> getAll() {
List<Entity> entityList = entityManager.findAll();
List<JSONObject> entities = new ArrayList<JSONObject>();
for (Entity n : entityList) {
JSONObject Entity = new JSONObject();
entity.put("id",n.getAddress());
entities.add(entity);
}
return new ResponseEntity<JSONObject>(entities,HttpStatus.OK); // XXX
}
Eclipse在XXX行中看到错误:
Multiple markers at this line
- The constructor ResponseEntity<JSONObject>(List<JSONObject>,HttpStatus) is undefined
- Type mismatch: cannot convert from ResponseEntity<JSONObject> to
ResponseEntity<List<JSONObject>>
- Type mismatch: cannot convert from ResponseEntity<JSONObject> to JSONObject
如何返回json + http回复?我的工作代码用于返回一个json对象+ http状态代码:
@RequestMapping(value="/{address}",produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<JSONObject> getEntity(@PathVariable("address") int address) {
Entity n = entityManager.findByAddress(address);
JSONObject o = new JSONObject();
o.put("id",n.getId());
o.put("address",n.getAddress());
return new ResponseEntity<JSONObject>(o,HttpStatus.OK);
}
@ResponseBody as the response has already been committed.
这种情况是 页面跳转 增加了 @ResponseBody 2017-02-16 19:08:09.131 DEBUG [catalina-exec-8][FilterChainProxy.java:200] - /WEB-INF/jsp/page/newsList.jsp has no matching filters 2017-02-16 19:08:09.132 DEBUG [catalina-exec-8][RequestContextFilter.java:104] - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@64327ce7 2017-02-16 19:08:09.132 ERROR [catalina-exec-8][ErrorPageFilter.java:204] - Cannot forward to error page for request [/newsList] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
这种情况是页面不存在 2017-02-16 19:14:13.561 ERROR [catalina-exec-2][ErrorPageFilter.java:204] - Cannot forward to error page for request [/newsList] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
@ResponseBody
@RequestMapping("/newsList")
public ModelAndView newsList()
throws Exception
{
LiveNewsInfo newsInfo = new LiveNewsInfo();
List<LiveNewsInfo> newsList = liveNewsInfoMapper.selectLiveNewsInfoList(newsInfo);
// newsInfo.setPageNum(pageNum);
// newsInfo.setPageCount(10);
// // 页面位置 /WEB-INF/jsp/page/page1.jsp
ModelAndView mav = new ModelAndView("page/newsList");
mav.addObject("newsList", newsList);
return mav;
}
/**
* 响应到JSP页面page1
*
* @return
* @author SHANHY
* @create 2016年1月5日
*/
@RequestMapping("/page1")
public ModelAndView page1()
{
// 页面位置 /WEB-INF/jsp/page/page1.jsp
ModelAndView mav = new ModelAndView("page/page1");
mav.addObject("content", hello);
return mav;
}
@responsebody 返回json
添加jackson依赖
添加@ResponseBody
测试: 注意,如果输入中文,出现乱码现象,则需要@RequestMapping(value="/appinterface", produces = "text/json;charset=UTF-8")
原理:
当一个处理请求的方法标记为@ResponseBody时,就说明该方法需要输出其他视图(json、xml),SpringMVC通过已定义的转化器做转化输出,默认输出json。
其实是注解驱动帮我们做了这件事情。
@ResponseBody与response.getWriter .write()区别
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
数据,需要注意的呢,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
2、
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
User字段:userName pwd
那么在前台接收到的数据为:''{"userName":"xxx","pwd":"xxx"}''
效果等同于如下代码:(由此看出,使用 ResponseBody则比较省事些)
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
===========================
理解:很多情况我们需要在controller接收请求然后返回一些message。
在springmvc中当返回值是String时,如果不加@ResponseBody的话,返回的字符串就会找这个String对应的页面,如果找不到会报404错误。
如果加上@ResponseBody注解的话,返回的就是json字符串,并且把这个json字符串返回给发送请求的原页面。
当然也有时候不加@ResponseBody注解,那么就需要我们在controller的方法中传入response参数,然后在方法里面获取response.getWriter()赋给PrintWriter。然后通过PrintWriter把这个字符串以流的形式传递给原发送请求的页面。
应用场景:页面或者js异步请求Controller,Controller不需要返回view,而只需要返回数据时,就可以使用@ResponseBody注解。@ResponseBody注解会把return 的结果放到response对象中。
只要在页面或者js中ajax指定dataType,并且在Controller上使用@ResponseBody注解来修饰,SpringMVC就会帮我们把这个Controller返回的对象转为json格式的。
若想返回一段小的字符串到页面上,可以在Controller中使用PrintWriter类,直接 out.print(字符串),此时这个java方法不需要使用@ResponseBody注解修饰,若想用@ResponseBody注解修饰,只需要在ajax中指定dataType为text。
@ResponseEntity返回值(怪异)
定制相应头
/**
* 将返回数据放在响应体中
*
* ResponseEntity<String>:响应体中内容的类型
* @return
*/
//@ResponseBody
@RequestMapping("/haha")
public ResponseEntity<String> hahah(){
MultiValueMap<String, String> headers = new HttpHeaders();
String body = "<h1>success</h1>";
headers.add("Set-Cookie", "username=hahahaha");
return new ResponseEntity<String>(body , headers, HttpStatus.OK);
}
关于春季:返回@ResponseBody“ ResponseEntity>”和response返回的是什么的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于@ResponseBody as the response has already been committed.、@responsebody 返回json、@ResponseBody与response.getWriter .write()区别、@ResponseEntity返回值(怪异)等相关知识的信息别忘了在本站进行查找喔。
本文标签: