资讯专栏INFORMATION COLUMN

【Myself-Security】SpringMVC 开发 RESTFul API

bawn / 570人阅读

摘要:我们需要在中声明对应的接口,并在值对象的方法上指定视图,最后在方法上指定视图即可。本文是针对基于服务开发的案例教程,多模块开发的项目的基础演进。

RestFul API

一般的API都是什么样子的呢?

查询 /user/query?name=tom              GET
详情 /user/getInfo?id=1                GET
创建 /user/create?name=tom            POST
修改 /user/update?id=1&name=jay       POST
删除 /user/delete?id=1                 GET

那么我们希望的RESTFul API 是什么样子的呢?

查询    /user?name=tom             GET
详情    /user/1                    GET
创建    /user                      POST
修改    /user/1                    PUT
删除    /user/1                    DELETE

简单的说,RESTFul就是:
1、用URL描述资源
2、使用HTTP方法描述行为,使用HTTP状态码来表示不同的结果
3、使用json交互数据
4、RESTFul只是一种风格,并不是强制的标准

RESTFul 成熟度模型

Level0:使用Http作为传输方式
Level1:引入资源概念,每个资源都有对应的URL
Level2:使用HTTP方法进行不同的操作,使用HTTP状态码来表示不同的结果
Level3:使用超媒体,在资源的表达中包含了链接信息
编写第一个RESTFul API

首先我们先了解一些常用的注解

1、@RestController 标明此Controller提供RestAPI
2、@RequestMapping及其变体。映射http请求URL到java方法
3、@RequestParam 映射请求参数到java方法的参数
4、@PageableDefault指定分页参数默认值

直接拿出代码模块来讲解吧!

package com.myself.web.controller;

import com.fasterxml.jackson.annotation.JsonView;
import com.myself.dto.User;
import com.myself.dto.UserQueryCondition;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @author  MySelf
 * @create  2018/9/15
 * @desc User Controller 层
 **/
@RestController
@RequestMapping("/user")
public class UserController {

    /**
     * 获取用户列表
     * @RequestMapping(value = "/user", method = RequestMethod.GET)
     * @RequestParam(name = "username",required = false,defaultValue = "tom") String nickname
     * @param condition {@link UserQueryCondition}
     * @return {@link List}
     */
    @GetMapping()
    @JsonView(User.UserSimpleView.class)
    public List query(UserQueryCondition condition,@PageableDefault(page = 2,size = 17,sort = "username,asc") Pageable pageable){
        //反射工具
        System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE));

        System.out.println(pageable.getPageSize());
        System.out.println(pageable.getPageNumber());
        System.out.println(pageable.getSort());

        List users = new ArrayList<>();
        users.add(new User());
        users.add(new User());
        users.add(new User());
        return users;
    }

    /**
     * 获取用户信息 正则校验参数必须为数字
     * @RequestMapping(value = "/user/{id:d+}", method = RequestMethod.GET)
     * @param idxxx {@link String}
     * @return {@link User}
     */
    @GetMapping("/{id:d+}")
    @JsonView(User.UserDetailView.class)
    public User getInfo(@PathVariable(name = "id") String idxxx){
        User user = new User();
        user.setUsername("tom");
        return user;
    }

}

User Bean 对象

package com.myself.dto;


import com.fasterxml.jackson.annotation.JsonView;

/**
 * @author  MySelf
 * @create  2018/9/15
 * @desc User Bean
 **/
public class User {

    /** 用户简单视图 */
    public interface UserSimpleView {}

    /** 用户详情视图 */
    public interface UserDetailView extends UserSimpleView {}

    /** 用户名 */
    private String username;

    /** 用户密码 */
    private String password;

    @JsonView(UserSimpleView.class)
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @JsonView(UserDetailView.class)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

接下来我们就来讲解一些注解的使用点,其实看着注解也能大致了解了。

首先我们在接受参数时,可以使用@PathVariable映射url片段到java方法的参数,同时也支持在url声明中使用正则表达式,使用@JsonView控制json输出内容。

我们需要在Bean中声明对应的接口,并在值对象的get方法上指定视图,最后在Controller方法上指定视图即可。

还有就是,当我们在处理创建请求时,还要注意可以使用@RequestBody映射请求体到java方法参数,且要注意对日期类型参数的处理,也可以使用@Valid注解和BindingResult验证请求参数的合法性并处理校验结果。

本文是针对UncleCatMySelf/myself-security(基于Spring Security + Spring Social + Spring Security OAuth + REST服务开发的案例教程,Maven多模块开发)的GitHub项目的基础演进。

如果本文对你有所帮助,欢迎关注本人技术公众号,谢谢。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77159.html

相关文章

  • SpringMVC+RestFul详细示例实战教程(实现跨域访问)

    摘要:方法和对应的方法定义定义重启服务器,运行上面的程序。五添加支持实现跨域访问当访问时,你可能需要面对同源策略问题。错误如下一般来说,在服务器端,我们在响应中返回额外的访问控制头,实现跨域链接。 一、理解 REST REST(Representational State Transfer),中文翻译叫表述性状态转移。是 Roy Thomas Fielding 在他2000年的博士论文中提出...

    U2FsdGVkX1x 评论0 收藏0
  • 【开源项目】Spring Security三大权限框架案例讲解01—项目初始化

    摘要:前言大致简介项目主要逐步迭代讲解服务开发,通过实际的案例开发来讲解,项目注解详细适合作为教程案例,同时对代码的演进还有重构也会有对应的推文讲解什么是登录与账户安全大多数初级的程序员可能理解的比较简单,即普通的表单登录,数据查询等等,但是真 GitHub UncleCatMySelf/myself-security 前言 大致简介项目主要逐步迭代讲解Spring Security + S...

    mushang 评论0 收藏0
  • 【开源项目】Spring Security三大权限框架案例讲解01—项目初始化

    摘要:前言大致简介项目主要逐步迭代讲解服务开发,通过实际的案例开发来讲解,项目注解详细适合作为教程案例,同时对代码的演进还有重构也会有对应的推文讲解什么是登录与账户安全大多数初级的程序员可能理解的比较简单,即普通的表单登录,数据查询等等,但是真 GitHub UncleCatMySelf/myself-security 前言 大致简介项目主要逐步迭代讲解Spring Security + S...

    hizengzeng 评论0 收藏0
  • 慕课网_《SpringMVC数据绑定入门》学习总结

    摘要:数据绑定入门学习总结时间年月日星期日说明本文部分内容均来自慕课网。慕课网教学示例源码个人学习源码第一章课程介绍数据绑定入门概述数据绑定概念来自百度百科简单绑定是将一个用户界面元素控件的属性绑定到一个类型对象实例上的某个属性的方法。 《SpringMVC数据绑定入门》学习总结 时间:2017年2月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.co...

    Karrdy 评论0 收藏0
  • Spring Boot 2.x(十):构建优雅的RESTful接口

    摘要:满足这些约束条件和原则的应用程序或设计就是。需要注意的是,是设计风格而不是标准。同一个路径,因为请求方式的不同,而去找寻不同的接口,完成对资源状态的转变。一个符合风格的就可以称之一个的接口。 RESTful 相信在座的各位对于RESTful都是略有耳闻,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性状态转移是一组架构约...

    nevermind 评论0 收藏0

发表评论

0条评论

bawn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<