在看教程的时候发现,平时使用springMVC习惯不加注解。会在springCloud中引起大麻烦

基于微服务的四大基本原则:

  1. 基于AFK拆分原则

  2. 无状态服务

  3. 前后分离

  4. 基于Restful API接口

其中由于是基于Restful 接口,所以不指定@RequestMapping的提交方式是不行的

并且交给SpingMVC自动推断属性名也是不行的 @RequestParam(value=”xxx”) (省略写法 @RequestParam(”xxx”))是必须的

以前写controller层的时候都是默认带上 @RequestParam 的, 今天发现不加 @RequestParam 也能接收到参数

如果要@RequestParam为一个int型的数据传值,假如前端并未输入,那么将会为int型的数据赋值为null。
显然,这是不允许的,直接报错。
可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传

下面我们来区分一下加与不加的区别

这里有两种写法

    @RequestMapping("/list")  
public String test(@RequestParam Long parentId) {

}
```

``` java
@RequestMapping("/list")
public String test(Long parentId) {

}
```

第一种 必须带有参数,也就是说你直接输入 localhost:8080/list 会报错 不会执行方法 只能输入 localhost:8080/list?parentId=? 才能执行相应的方法

第二种 可带参数也可不带参数 就是说你输入 localhost:8080/list 以及 localhost:8080/list?parentId=? 方法都能执行

当然你也可以设置 @RequestParam 里面的required为false(默认为true 代表必须带参数) 这样就跟第二种是一样的了

如下:

``` java
@RequestMapping("/list")
public String test(@RequestParam(required=false) Long parentId) {
.....
}

当然你还可以设置里面的defaultValue的属性
如下:

@RequestMapping("/list")  
public String test(@RequestParam(defaultValue="0")  Long parentId) {  
    .....    
}  

这样在地址里面也可以不带参数,如果带了参数会接收,不带参数会默认为0

里面还有一个value属性也讲一下, 前面所有的方法 传入的参数必须为parentId 才能接收到值

但是如果你加了value属性

@RequestMapping("/list")  
public String test(@RequestParam(value="id")  Long parentId) {  
    ..  
}  

这样会用id 代替parentId 也就是说你地址里面传入的参数名称为id localhost:8080/list?id=? 这种