一、知识点

1 @Controller 处理http请求(不推荐使用)
2 @RestController spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller
3 @RequestMapping 配置Url映射
4 @GetMapping 当 在方法上的注释时@RequestMapping的简化版,推荐使用,类似的还有@PostMapping等等
5 @RequestParam 映射请求参数到java方法的参数
6 @PageableDefault 指定分页参数默认值
7 @RequestBody 注解用于将Controller的方法参数,根据HTTP Request Header的content-Type的内容,通过适当的HttpMessageConverter转换为JAVA类

二、具体使用讲解

1.@Controller(了解即可,现在的开发基本都是前后端分离,不用再使用模版的方式,采用REST方式返回json数据是主流)

需要配合模版的使用

1)打开pom.xml

添加spring官方的一个模版thymeleaf

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2)在resources下新建文件夹templates,然后在其中新建一个html,index.html

<h1>hello spring boot!</h1>

3)controller中将@RestController改为@Controller

package com.dechy.girl.girl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; @Controller
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/hello", method = RequestMethod.GET)
public String say (){
return "index";
}
}

4)启动后,访问得到index.html的内容

2.@RestController

他是@Controller和@ResponseBody的组合

1)修改controller文件

package com.dechy.girl.girl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; @Controller
@ResponseBody
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/hello", method = RequestMethod.GET)
public String say (){
return girlProperties.getCupSize();
}
}

此处为了简便,采用@RestController即可

3.@RequestMapping

1)可以设置映射多个地址,这样访问多个地址能可以返回相同的内容,例如

package com.dechy.girl.girl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = {"/hello","/hi"}, method = RequestMethod.GET)
public String say (){
return girlProperties.getCupSize();
}
}

2)可以给整个类映射一个url,如下, 访问http://127.0.0.1:8082/hello/say即可

    package com.dechy.girl.girl;

    import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/hello")
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/say", method = RequestMethod.GET)
public String say (){
return girlProperties.getCupSize();
}
}

3)处理url的参数

@PathVariable
获取url中的数据
@RequestParam
获取请求参数的值
@GetMapping
组合注解
@PageableDefault
 指定分页参数默认值

i)@PathVariable

    package com.dechy.girl.girl;

    import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/hello")
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/say/{id}", method = RequestMethod.GET)
public String say (@PathVariable("id") Integer id){
return "id:"+id;
}
}

或者改成

 @RequestMapping(value = "/{id}/say", method = RequestMethod.GET)

ii)@RequestParam

对于传统的url.如http://127.0.0.1:8082/hello/say?id=111

    package com.dechy.girl.girl;

    import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/hello")
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/say", method = RequestMethod.GET)
public String say (@RequestParam("id") Integer myId){
return "id:"+myId;
}
}

其中黄色的不用一直,id对应的是url中的参数,myId可以自定义

另外,可以给@RequestParam设置默认值

    package com.dechy.girl.girl;

    import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/hello")
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/say", method = RequestMethod.GET)
public String say (@RequestParam(value="id",required = false,defaultValue = "0") Integer myId){
return "id:"+myId;
}
}

iii)@GetMapping(推荐)

用@RequestParam的话,感觉代码太长,那么就可以使用@GetMapping,另外还可以有@PostMapping @PutMapping等等

    package com.dechy.girl.girl;

    import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/hello")
public class HelloController { @Autowired
private GirlProperties girlProperties; @GetMapping(value="/say")
public String say (@RequestParam(value="id",required = false,defaultValue = "0") Integer myId){
return "id:"+myId;
}
}

iiii)@PageableDefault

指定指定分页参数默认值。

 @RequestMapping(value = "/user",method = RequestMethod.GET)
public List<User> query(UserQueryCondition userQueryCondition, @PageableDefault(page=1,size=10,sort="username,asc") Pageable pageable){
System.out.println(pageable.getPageNumber());
System.out.println(pageable.getSort());
System.out.println(pageable.getPageSize());
System.out.println(userQueryCondition.toString());
List<User> users=new ArrayList<>();
users.add(new User());
users.add(new User());
users.add(new User());
return users;
}

备注:此处Pageable需要引入如下依赖

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>

springboot中controller的使用的更多相关文章

  1. Q1:spring-boot中Controller路径无法被访问的问题

    在学习spring-boot入门的第一个例子就是spring-boot-web的一个在页面上输出hello-world的例子,在运行这个例子的时候我遇到了下面这个简单的问题,但是第一次解决还是花了我很 ...

  2. springboot 中controller 返回html界面或 jsp界面

    参考链接:https://blog.csdn.net/qq_15260315/article/details/80907056 经尝试,返回html界面没问题,但是返回jsp界面是有问题的,just ...

  3. springboot中Controller没有被扫描

    今天给客户开发登陆的密码加密需求,研究一下想,需要在本地搭一套环境,前台用js实现RAS加密,后台使用java解密.本是一套非常简单的环境,看最近springboot比较常用,所以想要搭一下sprin ...

  4. SpringBoot 中 @RestController 和 @Controller 的区别

    1 - 在springboot中,@RestController 相当于 @Controller + @ResponseBody;2 - 即在Controller类中,若想返回jsp或html页面,则 ...

  5. SpringBoot 中常用注解@Controller/@RestController/@RequestMapping的区别

    SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别 @Controller 处理http请求 @Controller //@Re ...

  6. SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍

    原文 SpringBoot 中常用注解 @Controller/@RestController/@RequestMapping介绍 @Controller 处理http请求 @Controller / ...

  7. springboot中的controller注解没有生效

    springboot中的controller注解没有生效  , 启动的Application类没有在controller的父目录或同级目录

  8. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  9. springboot中swaggerUI的使用

    demo地址:demo-swagger-springboot springboot中swaggerUI的使用 1.pom文件中添加swagger依赖 2.从github项目中下载swaggerUI 然 ...

随机推荐

  1. 整合mybaties 逆向生成 pojo mapper.xml

    第一步:配置properties 第二步:放入generatorConfig.xml文件  在总目录下  这个是生成工具 第三步:放入工具类,自动生成用的,  pom里面要加入6个依赖 第四步:运行u ...

  2. [转载]FMS Dev Guide学习笔记(验证用户)

    一.开发交互式的媒体应用程序 1.使用外部资源验证用户 对于有限数量的客户,请求用户名密码,然后通过外部资源(像数据库.LDAP服务或其它访问授权服务)验证它们,是可行的.     a.SWF在请求连 ...

  3. PowerDesigner 设置code不等于name

    设置 code不等于name:  工具 - 常规选项 - “Dialog” - "code不等于name",取消选中

  4. webui-popover 一个轻量级的jquery弹出层插件

    该提示框插件可以和Bootstrap完美结合,但是并不一定需要和Bootstrap一起使用.它支持IE7以上的浏览器. 首先要引入需要的css  js  文件 <link rel="s ...

  5. azkaban编译以及安装(调度系统)

    编译源码 下载azkaban源码 git clone https://github.com/azkaban/azkaban.git   jdk要求是1.8以上版本 export JAVA_HOME=/ ...

  6. mysql limit语句

    [mysql limit语句] 代码: SELECT * FROM table LIMIT 2 OFFSET 1; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. ...

  7. FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK

    [FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK] 1.FLAG_ACTIVITY_NEW_TASK 2.FLAG_ACTIVITY_CLEAR_T ...

  8. tomcat实现https

    第一步:生成key文件: C:\>keytool -genkey -alias tomcat -keyalg RSA -keystore C:\tomcat.key 密码最好设置默认change ...

  9. python 取当前日期

    import time time.strftime('%Y-%m-%d',time.localtime(time.time()))

  10. PHP ActiveRecord demo栗子中 关于类名 的问题

    问题: ActiveRecord如何将单个类名与表名相关联? 我昨天才发现了ActiveRecord,很奇妙的php数据库框架. 但是,我仍然对以下工作感到困惑: 1.下面这个Person Model ...