当处理器处理完后,需要返回数据和跳转页面,用ModelAndView是最合适的,相关用法我们笔记3中有使用到,这样不再赘述了
@RequestMapping(value = "/returnString-view.do" )
public String doReturnView(HttpServletRequest request,String name,Integer age){
request.setAttribute("name",name);
request.setAttribute("age",age);
//show:逻辑视图名称,项目中需要配置视图解析器
//框架对视图执行forward转发操作
return "show";
}
处理器方法返回String–表示逻辑视图名称,需要配置视图解析器;如果我们用的是完整的视图路径的话,记得要把视图解析器的配置给去掉,不然路径会重叠,到时候就会报404了
void不能表示数据,也不能表示视图;在成功优酷ajax时可以使用viod返回值,通过HttpServletResponse输出数据,相应ajax请求;ajax请求服务端返回的就是数据,和视图无关
先在项目中加入jquery
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
处理器返回string,表示视图名称
@RequestMapping(value = "/returnVoid-ajax.do" )
public void doReturnViewAjax(HttpServletResponse response,String name,Integer age) throws IOException {
System.out.println("doReturnViewAjax,name="+name+",age="+name);
//处理ajax,使用json做数据的格式
//service调用完成了,使用Student表示处理结果
Student student=new Student();
student.setName(name);
student.setAge(age);
String json="";
//b啊结果的对象转为json格式的数据
if(student != null){
ObjectMapper om=new ObjectMapper();
json=om.writeValueAsString(student);
System.out.println("student转换的json===="+json);
}
//输出数据,相应ajax的请求
response.setContentType("application/json;charset=:utf-8");
PrintWriter pw=response.getWriter();
pw.println(json);
pw.flush();
pw.close();
}
处理器方法也可以返回Object对象。这个Object可以是Integer,String,自定义对象,Map,List等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。springmvc处理器方法返回object,可以转为json输出到浏览器,相应ajax的内部原理
加入处理json的工具库依赖,springmvc默认使用jackson
com.fasterxml.jackson.core
jackson-core
2.9.0
com.fasterxml.jackson.core
jackson-databind
2.9.0
在springmvc配置文件中加入
(注解驱动)
这一步相当完成了
json=om.writeValueAsString(student);
;所实现的功能是:完成java对象到json,xml,text和二进制等数据格式的转换;其中
HttpMessageConveter
接口(消息转换器)定义了java转为json,xml等数据格式的方法,这个接口有很多实现类,这些实现类完成了上面所说的转换。被加入配置文件后会自动创建
HttpMessageConveter
接口的7个实现类对象,包括MappingJackson2HttpMessageConverter
(使用jackson工具库中的ObjectMapper实现java对象转为json字符串)
在处理器方法上加入注解@ResponseBody
这一步相当完成了
response.setContentType("application/json;charset=:utf-8");
PrintWriter pw=response.getWriter();
pw.println(json);
处理器方法返回一个student,通过框架转为json,响应ajax请求
@RequestMapping(value = "/returnStudentJson.do" )
@ResponseBody
public Student doReturnViewAjax(String name,Integer age){
//调用service,获取请求结果数据,student对象表示结果数据
Student student=new Student();
student.setName("tiaotiao");
student.setAge(20);
//会被框架转为json
return student;
}
@ResponseBody
:把处理器方法返回对象转为json后,通过HttpServletResponse输出给浏览器;位置:方法定义的上面,和其他注解没有顺序的关系
url:"returnStudentJson.do"
即可[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fMIWyWj2-1595768985087)(https://i1.100024.xyz/i/2020/07/26/kp218x.png)]
ArrayList
中每个类的canWrite()
方法,检查那个HttpMessageConverter
接口的实现类能处理Student类型的数据–MappingJackson2HttpMessageConverter
write()
,MappingJackson2HttpMessageConverter
的write()
方法,把tiaotiao的student对象转为json,调用Jackson的ObjectMapper实现转为json;contentType:application/json;charset=utf-8
@ResponseBody
把2的结果数据输出到浏览器,ajax请求处理完成处理器方法返回List
@RequestMapping(value = "/returnStudentJsonArray.do" )
@ResponseBody
public List doReturnViewAjaxArray(String name, Integer age){
List s=new ArrayList();
//调用service,获取请求结果数据,student对象表示结果数据
Student student=new Student();
student.setName("tiaotiao");
student.setAge(20);
s.add(student);
student=new Student();
student.setName("pipi");
student.setAge(19);
s.add(student);
//会被框架转为json
return s;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1yISDtZv-1595768985092)(https://pic.imgdb.cn/item/5f1d1a0b14195aa5948276b1.jpg)]
String表示文本,不是视图;区分返回值String是数据还是视图,就看有没有@ResponseBody注解,有的话是数据,反之为视图
@RequestMapping("/StringData.do")
@ResponseBody
public String doStringData(String name,Integer age){
return "返回String文本数据";
}
这样除了要把url改了,还要把dataType的类型改成text或者把这句给注释掉,不然无法转换,会报错
这里出现中文乱码,原因是使用了text/plain;charset=ISO-8859-1
作为Context-Type
,解决办法:给@RequestMapping
加上一个属性produces
@RequestMapping(value = "/StringData.do",produces = "text/plain;charset=utf-8")
@ResponseBody
public String doStringData(String name,Integer age){
return "返回String文本数据";
}
ArrayList
中每个类的canWrite()
方法,检查那个HttpMessageConverter
接口的实现类能处理Student类型的数据–StringHttpMessageConverter
write()
,StringHttpMessageConverter
的write()
方法,把字符按照指定的编码处理 application/json;charset=ISO-8859-1`@ResponseBody
把2的结果数据输出到浏览器,ajax请求处理完成条条:该学习笔记是记录了我的学习过程,学习自动力节点,有不对的地方欢迎指出