在项目学习的过程中,使用到了哪些注解呢?

1:@RequestMapping

RequestMapping可以注解到类或者方法上,可以用来处理请求地址的映射。

注:注解于类上,说明该类中所有的响应请求方法都是以该注解地址为父路径的。

RequestMapping有几个属性,把最重要的几个分成以下3个类:

1)    value, method;

value:

指定的请求地址,或者URI模式的地址。

具体实现如下:

A:具体类:@RequestMapping(value="/user/roles/)          

B:含某个变量的类:@RequestMapping(value="/user/roles/{uid})     

在声明方法时:

publicStringgetProduct(@PathVariable("uid") Long uid){

则把声明的参数“uid”与形参uid所绑定,此时取得的形参是地址传递的uid参数。      

C:含有正则表达式的类Method:

Method:

制定请求的方法,GET,POST等,若无声明,则默认几个常见的都可以。如GET、POST、PUT、DELETE等都可以取得。

4: @GetMapping

 @GetMapping是一个组合注解,是@RequestMapping(method= RequestMethod.GET)的缩写。该注解将HTTP Get 映射到特定的处理方法上。

所以此处个人的理解,@GetMapping可以算是@RequestMapping的子集,可能该说法不是很严谨,但是我个人暂时是这么理解的。

1. 哪一些情况下,浏览器会发送get请求

a. 直接在浏览器地址栏输入某个地址

b. 点击链接

c. 表单默认的提交方式

2.特点:

a.   请求参数会添加到请求资源路劲的后面,只能添加少量参数

b.   请求参数会显示在浏览器地址栏,路由器会记录请求地址

5:@PostMapping

1. 哪一些情况下,浏览器会发送post请求

a.   设置表单method = "post"

2.特点:

a. 请求参数添加到实体内容里面,可以添加大量的参数(也解释了为什么浏览器地址栏不能发送post请求,在地址栏里我们只能填写URL,并不能进入到Http包的实体当中)

b. 相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)。

6:RequestBody

如果传输的是单层json对象,我们后台可以直接用 @RequestParam接收

$.ajax({

type : "post",

dataType : "json",

url : "/testRequestBody",

data:{

name:"韦德",

age:35

},

success : function(result) {

}

});

@RequestMapping("/testRequestBody")

public String testRequestBody(@RequestParamMap<String, Object> map) {

System.out.println(map);// {name=韦德, age=35}

return"index";

}

如果传输的是多层嵌套json对象,这个时候会就会出现数据丢失问题

@RequestBody很好的解决了这个问题,它会把前台传输过来的json转化为后台对应的对象

$.ajax({

type : "post",

dataType : "json",

url : "/testRequestBody",

contentType:"application/json",

data:JSON.stringify({

name:"韦德",

win:[2006,2012,2013],

age:35

}),

success : function(result) {

}

});

@RequestMapping("/testRequestBody")

public StringtestRequestBody(@RequestBodyMap<String, Object> map) {

System.out.println(map);//{name=韦德, win=[2006, 2012, 2013], age=35}

return"index";

}

需要注意的是前台需要指定contentType为"application/json"

同时要把json对象转化为String,否则后台不能识别

7:@ResponseBody

@ResponseBody注解到方法上,直接传回结果(字符串)

ajax请求返回json格式,往常我们这样做

privatevoid writeJson(HttpServletResponseresponse,Object object) {

String json =JSON.toJSONString(object);

response.setCharacterEncoding("UTF-8");

response.setContentType("application/json; charset=utf-8");

PrintWriter out = null;

try {

out = response.getWriter();

out.write(json);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (out != null) {

out.close();

}

}

}

这个时候 @ResponseBody就派上用场了,只需要一个注解,全部搞定

$.ajax({

type : "post",

dataType : "json",

url : "/testResponseBody",

success : function(result) {

console.info(result);

}

});

@RequestMapping("/testResponseBody")

@ResponseBody

public Map<String, Object>testRequestBody(){

Map<String,Object> result = new HashMap<String,Object>();

result.put("name", "韦德");

result.put("age", 35);

return result;

}

前台console输出

{

"age": 35,

"name": "韦德"

}

说一些个人的看法,非技术层面上的,一个 API 何时用 GET、POST 甚至 PUT 请求。

首先引入一个副作用的概念,副作用指当你发送完一个请求以后,网站上的资源状态没有发生修改,即认为这个请求是无副作用的。比如注册用户这个请求是有副作用的,获取用户详情可以认为是无副作用的。

再引入一个幂等性的概念,幂等是说,一个请求原封不动的发送N次和M次(N不等于M,N和M都大于1)服务器上资源的状态最终是一致的。比如发贴是非幂等的,重放10次发贴请求会创建10个帖子。修改帖子内容是幂等的,一个修改请求重放无论多少次,帖子最终状态都是一致的。(前提是同一个修改操作重复10次)

唠叨了这么多,回过头来,何时用 PUT POST GET DELETE:

GET:无副作用,幂等
PUT:副作用,幂等
POST:副作用,非幂等
DELETE:副作用,幂等

这么看的话,DELETE 和 PUT 请求好像毫无区别。为了进一步区分这些请求方式的应用场景,我们再引入一个技术特性,request body,就是大家广为流传的 "POST 请求传输数据量比较大“ 这一说法的来源。

POST/PUT 请求可以通过传递 request body 来发送大量的数据,而 GET/DELETE 不能。

所以上面的表格需要再加一项:

GET:无副作用,幂等,不可带 Request Body
PUT:副作用,幂等,可以带 Request Body
POST:副作用,非幂等,可以带 Request Body

DELETE:副作用,幂等,不可带 Request Body

2)  params,headers

params:

指定request中必须包含某些参数值,才让该方法处理。

headers:

指定request中必须包含某些指定的header值,才能让该方法处理请求。

3)  consumes,produces

consumes:

指定处理请求的提交内容类型(Content-Type),例如application/json,text/html; 

produces:

指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

2:@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:

3: @RequestParam

@RequestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),

它有三个常用参数:defaultValue = "0", required = false,value="isApp";

defaultValue 表示设置默认值,required通过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

形式如项目中的:

public ObjectuserMemberShop(@RequestParam(required= false,value="corpId")IntegercorpId,

@RequestParam("uid")Longuid){

}


参考一篇文章,其中讲了@controller、@service、@repository注解,自己复制下再总结下自己的一些想法。

如果一个类带了@controller、@service、@repository注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了。

首先:

Controller层使用@Controller注解

Service层使用@Service注解

Dao层使用@Repository注解

@Controller可注解于类上,声明该类为SpringMVC的Controller对象。

简单说:被@Controller注解的类是一个控制器,该类的方法是相应的动作。

@Service可注解于类上,

简单说:

1.声明该类是一个bean。如
@Service

@Scope("prototype")

public class Zoo

2.Zoo.java在bean中的id是"zoo",即类名且首字母小写

例:@Service("userService")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action。
dao层使用@repository注解

@Repository可注解于类上,

@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,

就可以使用@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。

框架:SpringMVC常用注解总结相关推荐

  1. SpringMVC-学习笔记03【SpringMVC常用注解】

    Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...

  2. springmvc常用注解

    转载自   springmvc常用注解 第一部分 一.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请 ...

  3. springmvc常用注解与类型转换

    springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --><context:annotation- ...

  4. springmvc php,SpringMVC 常用注解

    SpringMVC 常用注解 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  5. springmvc常用注解标签详解

    参考:https://www.cnblogs.com/leskang/p/5445698.html 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由Disp ...

  6. [转]springmvc常用注解标签详解

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  7. spring : springmvc常用注解标签详解(转)

    新的项目,新的学习,好久没用这些注解了,同时在学习使用shiro ,lucene 等等.在网上找了些博文,感谢作者的总结和分享. 欢迎交流,言归正传: 1.@Controller 在SpringMVC ...

  8. SpringMVC常用注解详解

    先说扫描注解 <context:component-scan base-package = "" /> component-scan 默认扫描的注解类型是 @Compo ...

  9. Spring的常用注解,SpringMVC常用注解

    spring注解 作用 IOC @Component 进行标注,所有层通用 @Repository 用于dao层实现类进行标注 @Service 用于Service层实现类进行标注 @Controll ...

最新文章

  1. 新 IDE 出现,程序员迎来危机?
  2. SpringMVC-快速入门
  3. 6部BBC “教材级” 地理纪录片,有生之年必看系列!
  4. 机器学习_决策树_ID3算法_C4.5算法_CART算法及各个算法Python实现
  5. MySQL数据库无完整备份删库,除了跑路还能怎么办?
  6. 华为鸿蒙系统好在哪,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  7. MinIO客户端快速入门指南
  8. 用公式求e^x的近似值
  9. 18复变函数的积分(四)
  10. System.out.println 在idea控制台输出的中文乱码问题
  11. TCP相关面试题总结
  12. 一个创业公司CEO的85条感悟
  13. 希望 线段树 01背包
  14. 【图像融合】基于matlab小波变换遥感图像融合【含Matlab源码 744期】
  15. 大数据概述(尚硅谷)
  16. mysql查询同时选修了两门_查找同时选修了C01及C02两门课程的学生姓名及学号
  17. 显示随机森林多元回归结果
  18. 2021SC@SDUSC山东大学软件学院软件工程应用与实践--YOLOV5代码分析(十三)metrics.py-1
  19. 迁移系统至固态硬盘的采坑回顾
  20. python3 文字合成语音MP3

热门文章

  1. Android之ProgressBar读取文件进度解析
  2. android面试小结
  3. MVC Action Filters 总结
  4. Java中log4j控制写入日志开关
  5. Mac OS 错误代码 -8072的可行解决方法
  6. shell脚本例子集锦
  7. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_1
  8. 机器学习入门笔记:(4.3)SMO算法
  9. php性能测试下载,PHP性能测试工具xhprof安装与使用方法详解
  10. java lambda 局部变量_java Lambda表达式访问局部变量详细介绍