java restful api开发_SpringBoot快速开发Restful Api

Spring-Boot Restful Api

1、Restful API开发

1.1 Restful简介

springMVC对编写Restful Api提供了很好的支持。

Restful Api有三个主要的特性:

是基于Http协议的,是无状态的。

是以资源为导向的

人性化的,返回体内部包含相关必要的指导和链接

面向资源?

传统的Api接口以动作为导向,并且请求方法单一。例如/user/query?id=1 GET方法 ;/user/create

POST方法 而在resultful风格下以资源为导向,例如: /user/id(GET方法,获取) /user/(POST方法,创建)

restful api 用url描述资源,用Http方法描述行为,用Http状态码描述不同的结果,使用json作为交互数据(包括入参和响应)

restful只是一种风格并不是一种强制的标准

1.2 编写restful api 测试用例

因为restful api 与传统api存在一些风格上的差异,例如以method代表行为。所以在开发的过程中需要一边开发一边测试,测试我们的接口是否达到了预期的目的。springBoot提供了开发restful api测试用例的方法。首先导入依赖

org.springframework.boot

spring-boot-starter-test

1.3 编写restful接口

1.3.1 基本注解

@RestController 声明一个controller负责提供restful接口

@RequestMapping 将请求的url映射到方法

@RequetParam 映射请求参数到方法请求参数 可以指定required指定此参数是否必填,name参数指定别名,defaultValue指定默认值。在传参时,SpringMVC会自动封装参数,所以可以在方法中用一个对象参数接收

1.3.2 @PathVariable

映射url片段到java方法参数

@GetMapping("/user/{id}")

public User getUserInfo(@PathVariable("id") String id){

return new User("sico","12345");

}

1.3.3 在url声明中使用正则表达式

在@pathVariable中url片段默认可以接收任何格式,任何类型,可以用正则表达式加以限定,例如:

/**

* 获取用户详情,利用正则表达式限定为只接收数字

* @param id

* @return

*/

@GetMapping("/user/{id:\\d+}")

public User getUserInfo(@PathVariable("id") String id){

return new User("sico","12345");

}

1.3.4 使用@jsonView控制json输出内容

SpringMVC会将实体对象转换成json返回。有时候我们希望在不同的请求中隐藏一些字段。可以用@JsonView控制输出内容。

使用@jsonView注解有以下步骤:

使用接口来声明多个视图

在值对象的getter方法上指定视图

在controller方法上指定视图

使用接口声明视图

此接口只作声明使用,可以直接放置到目标实体内部,示例:

public class User implements Serializable{

public interface SimpleView{};

public interface DetailView extends SimpleView{};

//....

}

注意继承关系,DetailView继承了SimpleView。即视图DetailView会显示被SimpleView标注的视图

在值对象上的getter方法上指定视图

@JsonView(SimpleView.class)

public String getUsername() {

return username;

}

//...

@JsonView(DetailView.class)

public String getPassword() {

return password;

}

在方法上指定视图

/**

* 获取用户详情,利用正则表达式限定为只接收数字

* @param id

* @return

*/

@GetMapping("/user/{id:\\d+}")

@JsonView(User.DetailView.class)

public User getUserInfo(@PathVariable("id") String id){

return new User("sico","12345");

}

由于视图的继承关系,DetailView任然会显示被SimpleView标注的字段

1.3.5 RequestMapping的变体

RequestMapping有以下变体,他们分别对应了不同的请求方法

@GetMapping 对应GET方法

@PostMapping 对应POST方法

@PutMapping 对应PUT方法

@DeleteMapping 对应DELETE方法

1.3.5 @RequestBody将请求体映射到java方法参数

@(spring)RequestBody将请求中的请求体中的实体数据转换成实体对象,常用语PUT和POST

/**

* 创建用户

* 仅有加入@RequestBody注解才能解析出请求体重传入的实体数据

*/

@PutMapping("/user")

public void create(@RequestBody User user){

User user1=new User("cocoa","123",1);

}

1.3.6 @Valid注解和BindingResult验证请求参数的合法性并处理校验结果

一般需要在请求接口中校验请求参数,例如参数是否为空,是否唯一等。

@NotBlack 非空注解,将此注解加到实体类属性上。

@NotBlank

private String username;

在请求方法的字段上加上@valid注解时,以上的注解将生效。如果请求接口的参数无法通过校验,将返回400

@PutMapping("/user")

public void create(@Valid @RequestBody User user){

User user1=new User("cocoa","123",1);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值