国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Myself-Security】SpringMVC 開發(fā) RESTFul API

bawn / 571人閱讀

摘要:我們需要在中聲明對應(yīng)的接口,并在值對象的方法上指定視圖,最后在方法上指定視圖即可。本文是針對基于服務(wù)開發(fā)的案例教程,多模塊開發(fā)的項(xiàng)目的基礎(chǔ)演進(jìn)。

RestFul API

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

查詢 /user/query?name=tom              GET
詳情 /user/getInfo?id=1                GET
創(chuàng)建 /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
創(chuàng)建    /user                      POST
修改    /user/1                    PUT
刪除    /user/1                    DELETE

簡單的說,RESTFul就是:
1、用URL描述資源
2、使用HTTP方法描述行為,使用HTTP狀態(tài)碼來表示不同的結(jié)果
3、使用json交互數(shù)據(jù)
4、RESTFul只是一種風(fēng)格,并不是強(qiáng)制的標(biāo)準(zhǔn)

RESTFul 成熟度模型

Level0:使用Http作為傳輸方式
Level1:引入資源概念,每個(gè)資源都有對應(yīng)的URL
Level2:使用HTTP方法進(jìn)行不同的操作,使用HTTP狀態(tài)碼來表示不同的結(jié)果
Level3:使用超媒體,在資源的表達(dá)中包含了鏈接信息
編寫第一個(gè)RESTFul API

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

1、@RestController 標(biāo)明此Controller提供RestAPI
2、@RequestMapping及其變體。映射http請求URL到j(luò)ava方法
3、@RequestParam 映射請求參數(shù)到j(luò)ava方法的參數(shù)
4、@PageableDefault指定分頁參數(shù)默認(rèn)值

直接拿出代碼模塊來講解吧!

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;
    }

    /**
     * 獲取用戶信息 正則校驗(yàn)參數(shù)必須為數(shù)字
     * @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;
    }
}

接下來我們就來講解一些注解的使用點(diǎn),其實(shí)看著注解也能大致了解了。

首先我們在接受參數(shù)時(shí),可以使用@PathVariable映射url片段到j(luò)ava方法的參數(shù),同時(shí)也支持在url聲明中使用正則表達(dá)式,使用@JsonView控制json輸出內(nèi)容。

我們需要在Bean中聲明對應(yīng)的接口,并在值對象的get方法上指定視圖,最后在Controller方法上指定視圖即可。

還有就是,當(dāng)我們在處理創(chuàng)建請求時(shí),還要注意可以使用@RequestBody映射請求體到j(luò)ava方法參數(shù),且要注意對日期類型參數(shù)的處理,也可以使用@Valid注解和BindingResult驗(yàn)證請求參數(shù)的合法性并處理校驗(yàn)結(jié)果。

本文是針對UncleCatMySelf/myself-security(基于Spring Security + Spring Social + Spring Security OAuth + REST服務(wù)開發(fā)的案例教程,Maven多模塊開發(fā))的GitHub項(xiàng)目的基礎(chǔ)演進(jìn)。

如果本文對你有所幫助,歡迎關(guān)注本人技術(shù)公眾號,謝謝。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77159.html

相關(guān)文章

  • SpringMVC+RestFul詳細(xì)示例實(shí)戰(zhàn)教程(實(shí)現(xiàn)跨域訪問)

    摘要:方法和對應(yīng)的方法定義定義重啟服務(wù)器,運(yùn)行上面的程序。五添加支持實(shí)現(xiàn)跨域訪問當(dāng)訪問時(shí),你可能需要面對同源策略問題。錯(cuò)誤如下一般來說,在服務(wù)器端,我們在響應(yīng)中返回額外的訪問控制頭,實(shí)現(xiàn)跨域鏈接。 一、理解 REST REST(Representational State Transfer),中文翻譯叫表述性狀態(tài)轉(zhuǎn)移。是 Roy Thomas Fielding 在他2000年的博士論文中提出...

    U2FsdGVkX1x 評論0 收藏0
  • 【開源項(xiàng)目】Spring Security三大權(quán)限框架案例講解01—項(xiàng)目初始化

    摘要:前言大致簡介項(xiàng)目主要逐步迭代講解服務(wù)開發(fā),通過實(shí)際的案例開發(fā)來講解,項(xiàng)目注解詳細(xì)適合作為教程案例,同時(shí)對代碼的演進(jìn)還有重構(gòu)也會(huì)有對應(yīng)的推文講解什么是登錄與賬戶安全大多數(shù)初級的程序員可能理解的比較簡單,即普通的表單登錄,數(shù)據(jù)查詢等等,但是真 GitHub UncleCatMySelf/myself-security 前言 大致簡介項(xiàng)目主要逐步迭代講解Spring Security + S...

    mushang 評論0 收藏0
  • 【開源項(xiàng)目】Spring Security三大權(quán)限框架案例講解01—項(xiàng)目初始化

    摘要:前言大致簡介項(xiàng)目主要逐步迭代講解服務(wù)開發(fā),通過實(shí)際的案例開發(fā)來講解,項(xiàng)目注解詳細(xì)適合作為教程案例,同時(shí)對代碼的演進(jìn)還有重構(gòu)也會(huì)有對應(yīng)的推文講解什么是登錄與賬戶安全大多數(shù)初級的程序員可能理解的比較簡單,即普通的表單登錄,數(shù)據(jù)查詢等等,但是真 GitHub UncleCatMySelf/myself-security 前言 大致簡介項(xiàng)目主要逐步迭代講解Spring Security + S...

    hizengzeng 評論0 收藏0
  • 慕課網(wǎng)_《SpringMVC數(shù)據(jù)綁定入門》學(xué)習(xí)總結(jié)

    摘要:數(shù)據(jù)綁定入門學(xué)習(xí)總結(jié)時(shí)間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼個(gè)人學(xué)習(xí)源碼第一章課程介紹數(shù)據(jù)綁定入門概述數(shù)據(jù)綁定概念來自百度百科簡單綁定是將一個(gè)用戶界面元素控件的屬性綁定到一個(gè)類型對象實(shí)例上的某個(gè)屬性的方法。 《SpringMVC數(shù)據(jù)綁定入門》學(xué)習(xí)總結(jié) 時(shí)間:2017年2月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...

    Karrdy 評論0 收藏0
  • Spring Boot 2.x(十):構(gòu)建優(yōu)雅的RESTful接口

    摘要:滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是。需要注意的是,是設(shè)計(jì)風(fēng)格而不是標(biāo)準(zhǔn)。同一個(gè)路徑,因?yàn)檎埱蠓绞降牟煌フ覍げ煌慕涌冢瓿蓪Y源狀態(tài)的轉(zhuǎn)變。一個(gè)符合風(fēng)格的就可以稱之一個(gè)的接口。 RESTful 相信在座的各位對于RESTful都是略有耳聞,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性狀態(tài)轉(zhuǎn)移是一組架構(gòu)約...

    nevermind 評論0 收藏0

發(fā)表評論

0條評論

bawn

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<