美文网首页
@ResponseBody和@RequestMapping

@ResponseBody和@RequestMapping

作者: 二狗不是狗 | 来源:发表于2020-03-30 09:25 被阅读0次

http400类状态码

400 请求出错,语法格式有误。
401 未授权,程序拒绝
403 禁止,禁止执行访问
404 找不到,当controller方法没有配置@ResponseBody时会返回这个异常码
405 不允许此方法
406 不可接受,根据此请求所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体。当没有配置返回数据的<mvc:message-converters>消息转换体时会返回这个异常码
407 需要代理身份验证
415 不支持的媒体类型,当返回的Content-Type类型不在请求头部中的Accept中时会返回这个异常码

@ResponseBody

1、@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
2、需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
3、在RequestMapping中return返回值默认解析为跳转路径,如果你此时想让Controller返回一个字符串或者对象到前台就会报404 not response的错误。
4、当加上@ResponseBody注解后不会解析成跳转地址,会解析成相应的json格式的对象、集合、字符串或者xml等直接返回给前台,前台可以通过ajax的“success”:fucntion(data){} data直接获取到。

@RequestMapping("/login")
@ResponseBody
public User login(User user){
    return user;
}
User字段:userName pwd
那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'


效果等同于如下代码:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
}

@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。

  • value/method
    value:指定请求的实际地址,指定的地址可以是URI Template 模式;
    method:指定请求的method类型, GET、POST、PUT、DELETE等;

value的uri值为以下三类:
1、可以指定为普通的具体值;
2、可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);
3、可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);

@RequestMapping(value="/new", method = RequestMethod.GET)  
public AppointmentForm getNewForm() {  
    return new AppointmentForm();  
}  
  • consumes/produces
    consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
    produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
@RequestMapping(consumes="application/json", produces={"application/json", "text/html"})  
public void addPet(@RequestBody Pet pet, Model model) {      
    // implementation omitted  
}  
  • params/headers
    params:指定request中必须包含某些参数值是,才让该方法处理。
    headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
仅处理请求中包含了名为“myParam”,值为“myValue”的请求
仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.ifeng.com/”的请求
@RequestMapping(params="myParam=myValue", headers="Referer=http://www.ifeng.com/")  
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    // implementation omitted  
} 

相关文章

网友评论

      本文标题:@ResponseBody和@RequestMapping

      本文链接:https://www.haomeiwen.com/subject/rzrmuhtx.html