为什么要写这篇贴?

  要写一个最简单的CRUD 符合 Restful Api    规范的  一个Controller, 想百度搜索一下 直接复制拷贝 简单修改一下 方法内代码。

  然而, 搜索结果让我无语到家。 没一个是正在符合 Restful Api 规范的实例。 最无语的是 你呀直接 JSP 页面了,还说什么  Restful Api 啊!!!

  为方便以后自己复制拷贝使用,我把自己刚写的贴出来。

  

Swagger2:
@Configuration
@EnableSwagger2
public class Swagger2
{
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.dj.edi.web"))
.paths(PathSelectors.any())
.build();
} private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("EID 用户 CRUD")
.description("EID 用户 CRUD")
.version("1.0")
.build();
} }
Application:
@SpringBootApplication
@Import(springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration.class)
public class ComEdiOrderUserApplication
{
public static void main(String[] args) {SpringApplication.run(ComEdiOrderUserApplication.class, args);} }
UserApiController:

@RestController
@RequestMapping("/v1/user")
public class UserApiController
{
private static final Logger LOGGER = LoggerFactory.getLogger(UserApiController.class); @Autowired
private ClientUsersRepository repository; @ApiOperation(value = "获取所有用户数据")
@RequestMapping(value = "/list", method = RequestMethod.GET)
public ResponseEntity<List<ClientUsers>> getClientUsersList() {
try {
return ResponseEntity.ok(repository.findAll());
} catch (Exception e) {
LOGGER.info(" 获取所有用户数据异常 " + e.getMessage(), e);
return ResponseEntity.status(500).body(null);
}
} @ApiOperation(value = "获取用户数据")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path")
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<ClientUsers> getClientUsers(@PathVariable String id) {
try {
return ResponseEntity.ok(repository.findOne(id));
} catch (Exception e) {
LOGGER.info(" 获取用户数据 " + id + " 数据异常 " + e.getMessage(), e);
return ResponseEntity.status(500).body(null);
}
} @ApiOperation(value = "创建用户", notes = "根据User对象创建用户")
@ApiImplicitParam(name = "users", value = "用户详细实体user", required = true, dataType = "ClientUsers", paramType = "body")
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<ClientUsers> createUser(@Valid @RequestBody ClientUsers users) {
try { users.setId(ObjectId.get().toString());
return ResponseEntity.ok(repository.save(users)); } catch (Exception e) {
LOGGER.info(" 创建用户 " + users + " 数据异常 " + e.getMessage(), e);
return ResponseEntity.status(500).body(null);
}
} @ApiOperation(value = "更新用户详细信息", notes = "根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "ClientUsers", paramType = "body")
})
@RequestMapping(value = "{id}", method = RequestMethod.PUT)
public ResponseEntity<ClientUsers> updateUser(@PathVariable("id") String id,@Valid @RequestBody ClientUsers user) {
try {
user.setId(id);
return ResponseEntity.ok(repository.save(user));
} catch (Exception e) {
LOGGER.info(" 更新用户 " + user + " 数据异常 " + e.getMessage(), e);
return ResponseEntity.status(500).body(null);
}
} @ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "String", paramType = "path")
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
public ResponseEntity<String> deleteUser(@PathVariable String id) {
try {
repository.delete(id);
return ResponseEntity.ok("ok");
} catch (Exception e) {
LOGGER.info(" 删除用户 " + id + " 数据异常 " + e.getMessage(), e);
return ResponseEntity.status(500).body(null);
}
}
}

ClientUsersRepository:
@Component
public interface ClientUsersRepository extends MongoRepository<ClientUsers, String>
{
ClientUsers findByips(String ip);
ClientUsers findByclientFlag(String clientFlag);
}
ClientUsers:
@Data
public class ClientUsers implements Serializable
{ @Id
private String id; /**
* 用户名称
*/
@NotBlank(message = "用户名称 不能为空")
@Pattern(regexp = "^(?!string)",message = "不能是 stirng")
private String userName; /**
* ip
*/
@NotNull(message = "ip 至少需要个")
private List<String> ips; /**
* 标识
*/
@NotBlank(message = " 标识 不能为空")
@Pattern(regexp = "^(?!string)",message = "不能是 stirng")
private String clientFlag; /**
* 客户服务ID
*/
@NotBlank(message = "客户服务ID 不能为空")
@Pattern(regexp = "^(?!string)",message = "不能是 stirng")
private String checkID;
}
有哪里不好的希望指正
 

Restful Api CRUD 标准示例 (Swagger2+validator)的更多相关文章

  1. 虚拟研讨会:如何设计好的RESTful API?

    http://www.infoq.com/cn/articles/how-to-design-a-good-restful-api/ REST架构风格最初由Roy T. Fielding(HTTP/1 ...

  2. 虚拟研讨会:如何设计好的RESTful API(转)

    原文:虚拟研讨会:如何设计好的RESTful API? REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风 ...

  3. 如何设计好的RESTful API 之好的RESTful API 特征

    原文地址:http://blog.csdn.net/ywk253100/article/details/25654021 导读:设计好RESTful API对于软件架构的可扩展性.可伸缩性和消费者的体 ...

  4. 最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。

     #基于webpack构建的 Koa2 restful API 服务器脚手架    这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeSc ...

  5. 我所理解的RESTful Web API [Web标准篇]

    REST不是一个标准,而是一种软件应用架构风格.基于SOAP的Web服务采用RPC架构,如果说RPC是一种面向操作的架构风格,而REST则是一种面向资源的架构风格.REST是目前业界更为推崇的构建新一 ...

  6. SpringBoot使用Swagger2实现Restful API

    很多时候,我们需要创建一个接口项目用来数据调转,其中不包含任何业务逻辑,比如我们公司.这时我们就需要实现一个具有Restful API的接口项目. 本文介绍springboot使用swagger2实现 ...

  7. 整合swagger2生成Restful Api接口文档

    整合swagger2生成Restful Api接口文档 swagger Restful文档生成工具 2017-9-30 官方地址:https://swagger.io/docs/specificati ...

  8. Spring Boot中使用Swagger2生成RESTful API文档(转)

    效果如下图所示: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!-- https://mvnrepository.com/artifact/io.springfox ...

  9. Swagger2在DBA Service中生成RESTful API的实践

    目的与背景: 目的:对外暴露DBA Service必要的RESTful API,形成规整的API文档 背景:DBA Service后端采用Spring-boot,属于Spring家族,故生成API的工 ...

随机推荐

  1. 转!mysql 命令行下 通过DELIMITER临时改变语句分隔符 执行存储过程

    mysql 在 Navicat 界面工具 执行存储过程ok,但是在命令行下执行失败. 原因在于,默认的MySQL语句分隔符为' ; ',在输入' ; '的时候,“以为”语句已经结束了,但实际上语句还没 ...

  2. LInux中的文件系统1

    2017-03-08 10:37:55 一.虚拟文件系统VFS 文件系统用于将位于磁盘上的文件按照某种方式组织进内存,并给上层应用程序提供统一的访问接口.Linux支持多种文件系统EXT2/3,NTF ...

  3. 华为交换机VRP用户界面配置及Telnet登录实验

    user privilege level level 设置使用以上用户界面登录后的用户级别 5 acl acl-number { inbound | outbound } (可选)在用户界面上应用AC ...

  4. Apache配置虚拟主机的三种方法(基于IP、端口、域名)

    1 Apache虚拟主机的实现方式有3种. 基于IP的虚拟主机 基于端口的虚拟主机 基于域名的虚拟主机 2.1 启用虚拟主机的准备工作 2.1.1安装httpd [root@mail httpd]# ...

  5. WSDL(WebService描述语言)文件介绍

    一.WSDL 1.WSDL 文档的组成部分 <portType>:web service 执行的操作 <message>:web service 使用的消息 <types ...

  6. spring Bean装配的几种方式简单介绍

    Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 ...

  7. matplotlib绘制散点图

    参考自Matplotlib Python 画图教程 (莫烦Python)(10)_演讲•公开课_科技_bilibili_哔哩哔哩 https://www.bilibili.com/video/av16 ...

  8. javascript笔记——js获取input标签中光标的索引

    出处:http://www.cnblogs.com/MrZouJian/p/5850553.html function getTxt1CursorPosition(){ var oTxt1 = doc ...

  9. Linux系统——date命令

    date命令 作用:用来显示或设定系统的日期与时间. 参数 -d<字符串>:显示字符串所指的日期与时间.字符串前后必须加上双引号: -s<字符串>:根据字符串来设置日期与时间. ...

  10. 开发者应该了解的API技术清单

    近几年,API经济纷纷崛起,无论是国外还是国内,众多厂商积极开放API.开发者很多时候是要借助这些API,才能轻松构建出一款应用,极大地提高开发效率和开发质量.文中整理了一份API服务清单,内容涵盖: ...