SpringBoot-web
给个例子:只要这么写之后,整个springmvc就可以执行了。
package com.boot.web.demo.bootweb1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@RequestMapping(value="/demo/hello")
public String hello(){
return "hello";
}
}
启动下springBoot的项目:
运行的结果如下:返回的就是String的字符串。
如果返回的是json字符串的话,因为用@ResponseBody响应出来的结果。代码如下:
@RequestMapping(value="/demo/json")
public Map<String,Object> json(){
Map<String,Object> map=new HashMap<>();
map.put("status","OK");
map.put("data", Arrays.asList("aaa","bbb","ccc"));
return map;
}
访问的结果如下:这就是一个json的字符串。
如果在@RequestMapping中属性value的值加后缀名的话,比如.html,发现也不会出现问题。因为这个和springmvc框架有不一样的地方。因为SpringBoot中没有对静态资源进行过滤的,所以这里加html是可以的。
进行传参的代码如下:
1、自动识别的方式:在springMVC有这样的方式会自动装配进去。代码如下:
@RequestMapping(value="/demo/auto")
public Map<String,Object> auto(Integer id,Integer no){
Map<String,Object> map=new HashMap<>();
map.put("id",id);
map.put("no",no);
return map;
}
运行的结果如下:它根据参数名称来适配的。这是动态的一种方式
2、加注解的方式,代码如下:
@RequestMapping(value="/demo/anno")
public Map<String,Object> anno(@RequestParam String account, @RequestParam String password){
Map<String,Object> map=new HashMap<>();
map.put("account",account);
map.put("password",password);
return map;
}
运行的结果如下:
但是有的时候地址栏上的参数和方法里的参数如果不一样的时候,而且有的时候地址栏上想传一个参数或者想传两个参数。这时可以用到@RequestParam注解的属性:
name为别名:从http地址栏上的请求拿到name的值从而把name的值赋给参数required:值是boolean值代表是否提供地址栏的数,默认值为true,defaultValue:代表是默认值,如果地址栏上不给值的话会给个默认值,这三个属性可有可无。
代码如下:
@RequestMapping(value="/demo/anno1")
public Map<String,Object> anno1(@RequestParam(required = false,name = "user",defaultValue = "admin") String account,
@RequestParam(required = false,name = "pass",defaultValue = "123") String password){
Map<String,Object> map=new HashMap<>();
map.put("account",account);
map.put("password",password);
return map;
}
访问的结果如下:
如果传一个参数的话:这就是这个注解好用的地方,用来读取http这样的一个key从而把值赋给方法的参数。
3、可以通过对象的方式去接收它:
3.1、建个User类,代码如下:
package com.boot.web.demo.bootweb1.entity;
public class User {
private String account;
private String password;
public String getAccount() {
return account;
}
public void setUserAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"account='" + account + '\'' +
", password='" + password + '\'' +
'}';
}
}
在springmvc中能够实现bean的自动映射,代码如下:
这种方式也能够实现自动的注入,一旦http请求的地址栏上有account,password这两个参数的话,就会把这两个参数注入到User类中的setXxx方法里去。
@RequestMapping(value="/demo/bean")
public Map<String,Object> bean(User user){
Map<String,Object> map=new HashMap<>();
map.put("account",user.getAccount());
map.put("password",user.getPassword());
return map;
}
然后访问的结果如下:这就是如果地址栏上给传参数的话就会封装,如果不给传参数的话,响应的参数就为null。这就是bean自动封装的方式。
现在用postMan来做一个测试:这就可以模拟很多的请求方式:不管用什么请求的方式对于上面的请求路径的结果都是一样的测试如下:
这里我演示下delete请求吧:
总结:这时的结果就令我们不可想象了,因为什么样的请求都可以得到一样的效果,在restFul的HTTP协议1.1之后的一个规范的接口,接口什么都接收是不行的,这不是想要的restFul风格的样式。在SpringBoot入门(八)引入restFul风格的controller,请多多关注。