这篇文章其实很早就想写,但是最近事情比较多(lan),就一直搁置了,好的,直接正文吧。
get请求一般通过url传参,如:
>
springboot数据库交互,字段不确定怎么查
由于springmvc是通过DispatcherServlet来作为入口的,所以其实只要看Servlet不拦截所有后缀的方法。 如果只要拦截特定的几个规则,可以配置一个Filter,在Filter中判断后缀,后缀不对的全给他跳转到404页面去
初写 Java 后端项目,使用 PageHelper 分页时调试发现,当 page 超过最大页数时,返回的一直时最后一页的数据,查询 PageHelper 文档( >
在做web相关的应用时,经常需要提供接口与用户交互(获取数据、上传数据等),由于这个过程需要用户进行相关的 *** 作,为了避免出现一些错误的数据等,一般需要对数据进行校验,随着接口的增多,校验逻辑的冗余度也越来越大,虽然可以通过抽象出校验的方法来处理,但还是需要每次手动调用校验逻辑,相对来说还是不方便。
为了解决这个问题,Java中提供了Bean Validation的标准,该标准规定了校验的具体内容,通过简单的注解就能完成必要的校验逻辑了,相对来说就方便了很多,而该规范其实只是规范,并没有具体的实现,Hibernate提供了具体的实现,也即Hibernate Validator,这个也是目前使用得比较多的验证器了。
首先新建一个spring boot项目,引入web依赖
在web依赖中,已经引入了hibernate-validator的支持,所以只需要引入web依赖即可。
如果你所使用的版本没有支持,或者不是使用SpringBoot项目,具体的请参考文档解决。
然后配置一下validator,由于默认情况下,Hibernate-validator使用的校验策略是依次校验,并且将不通过的结果保存,最后再统一抛出异常信息,但实际上,当校验出现第一个不满足情况的时候,就可以停止了(当然,如果选择全部验证完也是可以的),所以我们手动配置一下
接下来编写需要进行验证的Bean
上面的注解已经很能够见名知意了,所以这里就先不讲解,后面再补充常用的验证注解及作用总结。
定义一个简单的测试接口
注意上面所使用的 @Valid 注解,通过该注解能够使得验证生效,如果去除的话,可以看到验证逻辑并没有生效。
通过上面的一个简单注解之后,验证的逻辑已经能够生效,然而,在测试的时候,可能会出现下面的情况
这是因为,默认情况下,SpringBoot配置了默认异常处理器DefaultHandlerExceptionResolver,而该处理器仅仅是将异常信息打印出来,显然,我们并不需要返回如此多的信息,只需要将对应属性中的message信息给调用者即可,解决的方法有两种。
通过上面的处理之后,现在如果验证不通过,则可以以比较优雅的方式返回给调用者了。
这里需要注意,如果上面两种方式都开启的话,是以第一种方式优先的,所以,第二种方式不会生效。
上面的方式能够解决 @RequestBody 标注的参数的验证及错误处理,然而,并不能处理 @PathVariable 以及 @RequestParam 标注的入参(不生效),而事实上,这两种类型的 *** 作也是非常常用的(也是需要对这两种类型进行验证,除了手动验证外,还有一种通用的解决方案,也是通过注解来实现),对于这两种类型同样可以使用验证注解进行标注,如下所示
为了让对应的注解生效,可以在类的上方使用 @Validated 进行标注,注意是标注在类上方,即
但此时如果验证失败,会抛出异常信息,而且,异常类型不是 MethodArgumentNotValidException ,而是 ConstraintViolationException ,巨坑!!!,所以还需要捕获该类型并且进行处理,如下所示
到此,基本上的参数验证就能完成了。
此外,在搜索解决方案的过程中,也发现了两个有用的小技巧,顺便记录在这里(跟上面的内容无关哈)。
对于 @PathVariable 还有另外一种解决方案(严格来说作为验证并不完善),通过正则表达式来进行匹配(这种方式不支持长度限制,但可以进行类型限制,如只包含字符,只包含数字等),如下所示
对于 @RequestParam 来说,可以使用默认值来实现可变化的参数列表,如下所示
更复杂的如分页,排序等等,可以通过默认参数的形式,来实现,而不再需要强制调用者输入对应的参数(毕竟这些参数是可选的嘛)。
常用的注解主要有以下几个,作用及内容如下所示
本小节主要学习了如何在SpringBoot中使用Hibernate-Validator,验证器的作用在于验证参数是否符合规定,通过配置验证器以及对应的异常处理器,可以使我们从繁琐的验证流程中解脱出来,当然,对于复杂的验证,其实还是要手动验证的,验证器能提供的是一些通用的,常规的验证 *** 作,当然,大部分情况下已经足够了。
1通过Java获取本机ip,可以使用InetAddress类的getLocalHost()方法。
2通过Spring Boot配置文件(比如applicationyml)来设置数据库连接,可以使用Spring Boot placeholder实现,如:${localip}:3306
3在SpringBoot应用程序启动时,程序可以在启动参数里指定localip属性,获取本机ip,并与端口号组合成数据库链接地址。
spring boot接收前端传递过来的时间,总是比实际时间晚几个小时或者早几个小时,这是由于使用在@RequestBody 实体类,进行接收json类型字符串的时候,会把接受的string时间字段转换成lang类型,然后对应实体类的时候,会按照GMT+0时区的时间进行处理。
实现方法如下:
webxml中
<servlet>
<servlet-name>t1</servlet-name>
<servlet-class>comabctestT1</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <load-on-startup>标记web容器是否在启动的时候就加载这个servlet,当值为0或者大于0时,表示web容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;
正数的值越小,启动该servlet的优先级越高。
以上就是关于SpringBoot实现Restful service前后端数据交互篇全部的内容,包括:SpringBoot实现Restful service前后端数据交互篇、「SpringBoot实战」视图技术-Thymeleaf、springboot数据库交互,字段不确定怎么查等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)