请求注解:
- @RestController and @RequestMapping是springMVC的注解,不是springboot特有的
- @RestController = @Controller+@ResponseBody (Json格式)不加的话会当成一个页面view 会出错
- @SpringBootApplication = @Configuration+@EnableAutoConfiguration+@ComponentScan
curl 方法也能够进行页面的访问(控制台)
Postman中的GET请求:
1、单一参数@RequestMapping(path = "/{id}", method = RequestMethod.GET)
1) public String getUser(@PathVariable String id ) {}
2)@RequestMapping(path = "/{dep_id}/{user_id}", method = RequestMethod.GET)
可以同时指定多个提交方法
getUser(@PathVariable("depid") String departmentID,@PathVariable("userid") String userid)
3)一个顶俩
@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)
4)@RequestParam(value = "name", required = true)
可以设置默认值,比如分页
4)@RequestBody 请求体映射实体类
需要指定http头为 content-type为application/json charset=utf-8
5)@RequestHeader 请求头,比如鉴权
@RequestHeader("access_token") String accessToken
6)HttpServletRequest request自动注入获取参数
@PathVariable()中 city_id 从path中的city_id中取值,之后映射到cityId中,
//user_id 要与路径中的一致,之后映射到后面到PathVariable中对应到参数
@RestController
public class GetController {
private Map<String,Object> map=new HashMap<>();
@RequestMapping(path = "/{user_id}/{user_name}",method = RequestMethod.GET)
public Object findUser(@PathVariable("user_id") String userId,@PathVariable("user_name")String userName){
map.clear();
map.put("userId",userId);
map.put("userName",userName);
return map;
}
//默认值 required 是否是必须到
@GetMapping(value = "/v1/page_user1")
public Object pageUser(@RequestParam(value = "book_page",defaultValue = "0") int from,@RequestParam(value = "book_size",required = true) int size){
map.clear();
map.put("from" ,from);
map.put("size",size);
return map;
}
//传递Bean对象
@RequestMapping("/v1/save_user")
public Object saveUser(@RequestBody User user){
map.clear();
// map.put("age",user.getAge());
// map.put("name",user.getName());
map.put("user",user);
return map;
}
//传递消息头
@GetMapping("/v1/token")
public Object getToken(@RequestHeader("token") String token,String id){
map.clear();
map.put("token",token);
map.put("id",id);
return map;
}
//通过原来到Request的方法传参数
@GetMapping("/v1/request")
public Object testRequest(HttpServletRequest request){
map.clear();
String id=request.getParameter("id");
map.put("id",id);
return map;
}
Put/post/delete方法
put方法一般用于更新操作
@RestController
public class OtherHttpController {
Map<String,Object> map=new HashMap<>();
@PostMapping("/v1/login")
public Object login(String id,String pwd){
map.clear();
map.put("id",id);
map.put("password",pwd);
return map;
}
//用于更新操作
@PutMapping("/v1/update")
public Object put(String id){
map.clear();
map.put("id",id);
return map;
}
//删除操作
@DeleteMapping("/v1/del")
public Object delete(String id){
map.clear();
map.put("id",id);
return map;
}
}
Json框架
Bean--->Json
Jackson(springboot使用的)
常用框架 阿里 fastjson,谷歌gson等
JavaBean序列化为Json,
性能:Jackson > FastJson > Gson > Json-lib 同个结构
Jackson、FastJson、Gson类库各有优点,各有自己的专长
空间换时间,时间换空间
jackson处理相关自动
指定字段不返回:@JsonIgnore (用户的密码不能返回给前端)
指定日期格式:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8")
空字段不返回:@JsonInclude(Include.NON_NUll)
指定别名:@JsonProperty
目录结构
- src/main/java:存放代码
- src/main/resources
- static: 存放静态文件,比如 css、js、image, (访问方式 http://localhost:8080/js/main.js)
- templates:存放静态页面jsp,html,tpl
- config:存放配置文件,application.properties
引入thymeleaf依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
//注意:如果不引人这个依赖包,html文件应该放在默认加载文件夹里面,
//比如resources、static、public这个几个文件夹,才可以访问
同个文件的加载顺序,静态资源文件 Spring Boot 默认会挨个从
META/resources >resources >static >public
里面找是否存在相应的资源,如果有则直接返回。
在这里进行测试的时候,要将之前的一个方法进行注释掉,因为这是路径的完全匹配
之后在template中加入一个index.html发现找不到
localhost:8080/index.html
解决方法:引入thymeleaf模版引擎
@Controller
public class FileController {
@RequestMapping("/api/v1/gopage")
public Object getPage() {
return "index";
}
}
注意:要用@Controller不是@RestController(返回json)
通过拦截器实现resoller
resources/static目录默认是加进去的,所以不需要在路径中加入
自定义一个test文件,实现test文件中实现对test.js文件对访问
无法映射到test文件夹(没有录入到spring加载对范围中来)
解决办法:
spring.resources.static-locations =
classpath:/META-INF/resources/,
classpath:/resources/,
classpath:/static/,
classpath:/public/,
classpath:/test/
静态资源文件存储在CDN(内容分发网) 加快网站的访问速度