【WEB系列】自定义返回Http Code的n种姿势

虽然http的提供了一整套完整、定义明确的状态码,但实际的业务支持中,后端并不总会遵守这套规则,更多的是在返回结果中,加一个code字段来自定义业务状态,即便是后端5xx了,返回给前端的http code依然是200

那么如果我想遵守http的规范,不同的case返回不同的http code在Spring中可以做呢?

本文将介绍四种设置返回的HTTP CODE的方式

  • @ResponseStatus 注解方式
  • HttpServletResponse#sendError
  • HttpServletResponse#setStatus
  • ResponseEntity

查看更多

分享到

【WEB系列】RestTemplate 4xx/5xx 异常信息捕获

近期使用RestTemplate访问外部资源时,发现一个有意思的问题。因为权限校验失败,对方返回的401的http code,此外返回数据中也会包含一些异常提示信息;然而在使用RestTemplate访问时,却是直接抛了如下提示401的异常,并不能拿到提示信息

那么RestTemplate如果希望可以获取到非200状态码返回数据时,可以怎么操作呢?

查看更多

分享到

【DB系列】JPA错误姿势之Entity映射

本篇为JPA错误使用姿势第二篇,java的POJO类与数据库表结构的映射关系,除了驼峰命名映射为下划线之外,还会有什么别的坑么?

查看更多

分享到

【DB系列】MybatisPlus整合篇

前面介绍了SpringBoot整合Mybatis 实现db的增删改查操作,分别给出了xml和注解两种实现mapper接口的方式;虽然注解方式干掉了xml文件,但是使用起来并不优雅,本文将介绍mybats-plus的使用case,简化常规的CRUD操作

查看更多

分享到

【DB系列】Mybatis+注解整合篇

上一篇博文介绍了SpringBoot整合mybatis的过程,但是xml的方式,总感觉让人有点蛋疼;本文将介绍一种noxml的使用姿势,纯用注解的方式来支持CURD

查看更多

分享到

【DB系列】Mybatis+xml整合篇

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

本文将通过实例方式,介绍下如何整合SpringBoot + Mybatis,构建一个支持CRUD的demo工程

查看更多

分享到

【WEB系列】实现后端的接口版本支持(应用篇)

作为一个主职的后端开发者,在平时的工作中,最讨厌的做的事情可以说是参数校验和接口的版本支持了。对于客户端的同学来说,业务的历史包袱会小很多,当出现不兼容的业务变动时,直接开发新的就好;然而后端就没有这么简单了,历史的接口得支持,新的业务也得支持,吭哧吭哧的新加一个服务接口,url又不能和之前的相同,怎么办?只能在某个地方加一个类似v1, v2

那么有没有一种不改变url,通过其他的方式来支持版本管理的方式呢?

本文将介绍一种,利用请求头来传递客户端版本,在相同的url中寻找最适合的这个版本请求的接口的实例case

主要用到的知识点为:

  • RequestCondition
  • RequestMappingHandlerMapping

查看更多

分享到

【SpringSecurity系列】起源篇(零)

本篇为SpringSecurity的第一篇,主要来介绍下什么是SpringSecurity,以及在springboot中如何使用它

查看更多

分享到

【WEB系列】自定义请求匹配条件RequestCondition

在spring mvc中,我们知道用户发起的请求可以通过url匹配到我们通过@RequestMapping定义的服务端点上;不知道有几个问题大家是否有过思考

一个项目中,能否存在完全相同的url?

有了解http协议的同学可能很快就能给出答案,当然可以,url相同,请求方法不同即可;那么能否出现url相同且请求方法l也相同的呢?

本文将介绍一下如何使用RequestCondition结合RequestMappingHandlerMapping,来实现url匹配规则的扩展,从而支持上面提出的case

查看更多

分享到

【DB系列】JPA 错误姿势之环境配置问题

又回到jpa的教程上了,这一篇源于某个简单的项目需要读写db,本想着直接使用jpa会比较简单,然而悲催的是实际开发过程中,发现了不少的坑;本文为错误姿势第一篇,Repository接口无法注入问题

查看更多

分享到

【基础系列】自动配置选择生效

写了这么久的Spring系列博文,发现了一个问题,之前所有的文章都是围绕的让一个东西生效;那么有没有反其道而行之的呢?

我们知道可以通过@ConditionOnXxx来决定一个配置类是否可以加载,那么假设有这么个应用场景

  • 有一个Print的抽象接口,有多个实现,如输出到控制台的ConsolePrint, 输出到文件的 FilePrint, 输出到db的 DbPrint
  • 我们在实际使用的时候,根据用户的选择,使用其中的一个具体实现

针对上面的case,当然也可以使用@ConditionOnExpression来实现,除此之外推荐一种更优雅的选择注入方式ImportSelector

查看更多

分享到

【基础系列】从0到1实现一个自定义Bean注册器(应用篇)

我们知道在spring中可以通过@Component@Service, @Repository 装饰一个类,通过自动扫描注册为bean;也可以通过在配置类中,借助@Bean来注册bean;那么除了这几种方式之外,还有什么其他的方式来声明一个类为bean么?

我们是否可以自定义一个注解,然后将这个注解装饰的类主动声明为bean注册到spring容器,从而实现类似@Component的效果呢?

接下来本文将介绍,如果通过ImportBeanDefinitionRegistrar结合自定义注解来实现bean注册,主要用到的知识点如下:

  • ImportBeanDefinitionRegistrar bean注册的核心类
  • @Import 导入配置
  • ClassPathBeanDefinitionScanner

查看更多

分享到