下载地址: 阿里巴巴java开发规范-嵩山版
本着不重复造轮子,拿来即用的原则。
这里不介绍具体实现原理,不谈历史,只做说明 这里是前后端对接交互 矛盾点问题最多的地方 这里希望大家能够更清晰的认识这几个注解 包括其作用
这里说明一个http的资源规范定义
GET(查)、POST(增)、PUT(改)、DELETE(删)
在http的资源规范里面 明确要求 不同的请求类型代表不同的操作,但是目前大家在使用和操作的过程中,很自然而然的认为 post请求因为是安全的,而通用性的使用POST/GET, 这是因为 它们俩个同样能够进行 PUT/DELETE的操作
作用: 是用来标注具体请求URL,映射并绑定到具体方法和特定的类上。具体作用可参照Servlet中在web.xml中配置servlet的作用
<servlet> <servlet-name>servletName</servlet-name> <servlet-class>ServletClass</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletName</servlet-name> <!-- 这里是需要映射的控制器请求路径 --> <url-pattern>servletUrl</url-pattern> </servlet-mapping>提供参数: @RequestMapping 提供了很多可用参数,来帮助我们接收不同的请求 先来看一下注解源码
package org.springframework.web.bind.annotation; @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Documented @org.springframework.web.bind.annotation.Mapping public @interface RequestMapping { java.lang.String name() default ""; @org.springframework.core.annotation.AliasFor("path") java.lang.String[] value() default {}; @org.springframework.core.annotation.AliasFor("value") java.lang.String[] path() default {}; org.springframework.web.bind.annotation.RequestMethod[] method() default {}; java.lang.String[] params() default {}; java.lang.String[] headers() default {}; java.lang.String[] consumes() default {}; java.lang.String[] produces() default {}; }注意 Target 里面包含 ElementType.TYPE 和ElementType.METHOD 表示 该注解是可以在 方法和类上进行使用的。
value 1 path1 params2 method3 headers4 consumes & produces 5
此时结果一定是404
作用: 该注解 是 @Controller 和 @ResponseBody的结合体 意味着如果你的类使用该注解 就不需要在每个方法 打上@ResponseBody
例 @RestController @RestController @RequestMapping("/test") public class TestController { //此时你的方法就可以这么写 @GetMapping(path = "/test", produces="application/json") public String test() { return "{id:123,name:张三}"; } } 例 @Controller @Controller @RequestMapping("/test") public class TestController { //此时你的方法就要这么写 @GetMapping(path = "/test", produces="application/json") @ResponseBody public String test() { return "{id:123,name:张三}"; } }作用: 将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端 示例: 看上一章 ↑ 注意: 如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value="/cat/query",produces=“text/html;charset=utf-8”),前面是请求的路径,后面是编码格式。 ---- 一个莫得灵魂标注来源的小尾巴
作用: 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。 主要是根据请求方法进行类的区别
后端示例: @GetMapping(path = "/test/{id}") public String test(@PathVariable("id") Integer id) { return id; } 前端示例 $.ajax({ url: '/test/123' });该注解 一般使用GTE 资源请求方式使用 也就是所谓的REST 风格
该注解只是请求方式不同具体参数 参照 @RequestMapping介绍
该注解只是请求方式不同具体参数 参照 @RequestMapping介绍
该注解只是请求方式不同具体参数 参照 @RequestMapping介绍
该注解只是请求方式不同具体参数 参照 @RequestMapping介绍
基于以上说明 大概说明了一些参数入参反参的内容,这里 就重点说一下,这里也是众多 前后端分离开发造成矛盾最多的地方。 这里主要给大家说明俩个 参数注解
语法: @RequestParam(value=”参数名”,required=”true/false”,defaultValue=””) value:参数名 required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。 defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值---- 参考资源 :一个莫得灵魂标注来源的小尾巴
后端示例: 单参数 @GetMapping("test") public String test(@RequestParam("name")String name){ return name; } 后端示例: 数组 @GetMapping("test") public String test(@RequestParam("name[]")List<String> name){ return name; }前端示例: 单参数
$.get('/test',{name:'张三'},(ref)=>{ })前端示例: 数组
$.get('/test',{name:['张三','李四','王五']},(ref)=>{ })注意 @RequestParm 的参数接收本质是帮你把前端的请求参数全部变成 Map<String, Object> 类型的数据 key是 String value 是Object 也就是任意类型
注意该参数接收方式不要去接收对象 因为该注解获取参数请求是 Content-Type 为 application/x-www-form-urlencoded 不明白这个类型是什么意思 看这里 再不明白自己百度
作用: 处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据
正例 后端示例: 对象 @PostMapping("test") public String test(@RequestBody Test test){ return test.toString(); } 正例 前端示例: 对象 $.ajax({ url: '/test', contentType:'application/json', data:{ test:{ name:"张三", id:1233213, sex:'男', add:[ '地址1', '地址2' ... ] } } });该注解是专门用来处理 json 格式的对象数据 和 xml 格式的数据 所以请不要用@RequestParam 来做这个操作
value 属性跟path属性是一样的 用来填入 当前请求地址。 ↩︎ ↩︎
params 表示限制请求参数,并且表现形式为 www.xxx.com?id=123&name=张三 如果请求参数不为 id=123&name=张三 那么将会返回404 ↩︎
method 属性表示当前请求方式是 GET PUT POST 还是DELETE,当然由于该属性是数组形式所以 ↩︎
headers 这个属性表示限制请求头 ↩︎
consumes & produces 它们俩个的作用是限制 请求类型 和 返回类型 ↩︎
