@ResponseBody与@RequestBody使用之前将使用@RequestMapping,因此先来了解@RequestMapping作为预备知识
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。若用于类上,则表示该类中的所有响应请求的方法都是用该地址作为父路径。
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String demo(){
return "test";
}
}
像如上面的代码中,当输入路径为 user/index 时将会返回test.jsp页面
接下来我们来了解一下@ResponseBody
@ResponseBody可将返回的结果直接写入HTTP response body中,因此可在异步获取数据时使用。
而使用@RequestMapping后,返回值通常都会解析成跳转路径,但是在返回之前用@ResponseBody修饰后,返回结果将不解析为跳转路径,而是直接写入HTTP response body 中。例如异步获取json数据时,加上@Responsebody后,会直接返回json数据。
在此顺便附上两种java返回json的方法
第一种就是普通的字符串拼接,不使用@ResponseBody
@RequestMapping(value="/xxx",method=RequestMethod.POST)
public void demo(HttpServletResponse response){
String json="";
json="{\"success\":true,\"mag\":\"good\"}";
try{
response.getWriter().print(json);
response.getWriter().flush();
response.getWriter().close();
}catch(Exception e){
e.printStackTrace();
}
}
第二种就是利用@ResponseBody返回 json
public class Person {
private int id;
private String name;
private boolean status;
public Person(int id,String name,boolean status) {
this.id=id;
this.name=name;
this.status=status;
}
}
@RequestMapping(value = "/person/profile/{id}/{name}/{status}", method = RequestMethod.GET)
public @ResponseBody
Person porfile(@PathVariable int id, @PathVariable String name,
@PathVariable boolean status) {
return new Person(id, name, status);
}
接下来我们来介绍一下@RequestBody将HTTP请求正文插入方法中,使用合适的HttpMessageConverter将请求体写入某个对象中。
function login() {//页面异步请求 var mydata = '{"name":"' + $('#name').val() + '","id":"'+ $('#id').val() + '","status":"' + $('#status').val() + '"}'; $.ajax({ type : 'POST', contentType : 'application/json', url : "user/login", processData : false, dataType : 'json', data : mydata, success : function(data) { alert("id: " + data.id + "\nname: " + data.name + "\nstatus: " + data.status); }, error : function() { alert('出错了!'); } }); }; @RequestMapping(value = "user/login") @ResponseBody public Person login(@RequestBody Person person) {//将请求中的mydata写入Person对象中 return person;//不会被解析为跳转路径,而是直接写入HTTP response body中 }