Spring Boot做项目过程中出现的问题

springboot问题总结

1.在service的接口上声明@Service还是在service的接口的实现类上声明@Service?

答:

 `@Service`注解是标注在实现类上的,因为`@Service`是把`spring`容器中的`bean`进行实例化,也就是等同于`new`操作,只有`实现类`是可以进行`new`实例化的,而`接口`则不能,所以是加在`实现类`上的。 

2.@PathVariable() @PathParam()这两个注解有什么区别?

@RequestParam@PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充

@RequestParam

看下面一段代码:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

根据上面的这个URL,你可以用这样的方式来进行获取

public String getDetails(
    @RequestParam(value="param1", required=true) String param1,
        @RequestParam(value="param2", required=false) String param2){
...
}12345

@RequestParam 支持下面四种参数

  • defaultValue 如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
  • name 绑定本次参数的名称,要跟URL上面的一样
  • required 这个参数是不是必须的
  • value 跟name一样的作用,是name属性的一个别名

@PathVariable

这个注解能够识别URL里面的一个模板,我们看下面的一个URL

http://localhost:8080/springmvc/hello/101?param1=10&param2=201

上面的一个url你可以这样写:

@RequestMapping("/hello/{id}")
    public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

区别很明显了

@PathParam

这个注解是和spring的pathVariable是一样的,也是基于模板的,但是这个是jboss包下面的一个实现,上面的是spring的一个实现,都要导包


3.lombok中@Builder注解的作用?

lombok注解在java进行编译时进行代码的构建,对于java对象的创建工作它可以更优雅,不需要写多余的重复的代码,这对于JAVA开发人员是很重要的,在出现lombok之后,对象的创建工作更提供Builder方法,它提供在设计数据实体时,对外保持private setter,而对属性的赋值采用Builder的方式,这种方式最优雅,也更符合封装的原则,不对外公开属性的写操作!

@Builder声明实体,表示可以进行Builder方式初始化,@Value注解,表示只公开getter,对所有属性的setter都封闭,即private修饰,所以它不能和@Builder现起用

一般地,我们可以这样设计实体!

@Builder(toBuilder = true)
@Getter
public class UserInfo {
  private String name;
  private String email;
  @MinMoney(message = "金额不能小于0.")
  @MaxMoney(value = 10, message = "金额不能大于10.")
  private Money price;

}

@Builder注解赋值新对象

UserInfo userInfo = UserInfo.builder()
        .name("zzl")
        .email("bgood@sina.com")
        .build();

@Builder注解修改原对象的属性值

修改实体,要求实体上添加@Builder(toBuilder=true)

 userInfo = userInfo.toBuilder()
        .name("OK")
        .email("zgood@sina.com")
        .build();

4.mysql 插入值时,提示没有默认值,导致插入失败?

答:是因为你的主键没有设置自动增长;

5.前端发送插入数据到数据库请求,后端接收是用一个对象接收,返回信息插入成功,但是数据库没有真正插入?

答:

出现种情况目前我碰到的有这么一种:

就是在接收前端发送过来数据的时候,后端的对象接收如果不加@RequestBoby注解,不会提示报错,但是数据库不会真的提示增加,加上这个注解,就会成功增加

posted @ 2020-08-20 23:11  小智多磨  阅读(266)  评论(0编辑  收藏  举报