带玩具逛街时突然按下按钮的故事,丰满的妺妺3伦理播放,新婚人妻不戴套国产精品,大肉大捧一进一出好爽视频百度

2022就業(yè)季|Spring認(rèn)證教你,如何使用 Spring 構(gòu)建 REST 服務(wù)(二)

原創(chuàng) 收藏 評(píng)論
舉報(bào) 2022-07-28

書接上文???

HTTP 是平臺(tái)

要使用 Web 層次包裝您的存儲(chǔ)庫(kù),您必須使用 Spring MVC。多虧了 Spring Boot,代碼基礎(chǔ)設(shè)施很少。相反,我們可以專注于行動(dòng):

nonrest/src/main/java/payroll/EmployeeController.java

package payroll;

import java.util.List;

import org.springframework.web.bind.annotation.DeleteMapping;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.PutMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RestController;

@RestController

class EmployeeController {

private final EmployeeRepository repository;

EmployeeController(EmployeeRepository repository) {

this.repository = repository;

}

// Aggregate root

// tag::get-aggregate-root[]

@GetMapping("/employees")

List<Employee> all() {

return repository.findAll();

}

// end::get-aggregate-root[]

@PostMapping("/employees")

Employee newEmployee(@RequestBody Employee newEmployee) {

return repository.save(newEmployee);

}

// Single item


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

Employee one(@PathVariable Long id) {


return repository.findById(id)

.orElseThrow(() -> new EmployeeNotFoundException(id));

}

@PutMapping("/employees/{id}")

Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) {


return repository.findById(id)

.map(employee -> {

employee.setName(newEmployee.getName());

employee.setRole(newEmployee.getRole());

return repository.save(employee);

})

.orElseGet(() -> {

newEmployee.setId(id);

return repository.save(newEmployee);

});

}

@DeleteMapping("/employees/{id}")

void deleteEmployee(@PathVariable Long id) {

repository.deleteById(id);

}

}

@RestController表示每個(gè)方法返回的數(shù)據(jù)會(huì)直接寫入響應(yīng)體,而不是渲染模板。

AnEmployeeRepository由構(gòu)造函數(shù)注入到控制器中。

我們有每個(gè)操作的路由(@GetMapping、@PostMapping、@PutMapping和@DeleteMapping,對(duì)應(yīng)于 HTTP GET、POST、PUT和DELETE調(diào)用)。(注意:閱讀每種方法并了解它們的作用很有用。)

EmployeeNotFoundException是用于指示何時(shí)查找但未找到員工的異常。

nonrest/src/main/java/payroll/EmployeeNotFoundException.java

package payroll;

class EmployeeNotFoundException extends RuntimeException {

EmployeeNotFoundException(Long id) {

super("Could not find employee " + id);

}

}

當(dāng)EmployeeNotFoundException拋出 an 時(shí),Spring MVC 配置的這個(gè)額外花絮用于呈現(xiàn)HTTP 404:

nonrest/src/main/java/payroll/EmployeeNotFoundAdvice.java

package payroll;

import org.springframework.http.HttpStatus;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice

class EmployeeNotFoundAdvice {

@ResponseBody

@ExceptionHandler(EmployeeNotFoundException.class)

@ResponseStatus(HttpStatus.NOT_FOUND)

String employeeNotFoundHandler(EmployeeNotFoundException ex) {

return ex.getMessage();

}

}

@ResponseBody表示此建議直接呈現(xiàn)到響應(yīng)正文中。

@ExceptionHandlerEmployeeNotFoundException將建議配置為僅在拋出an 時(shí)才響應(yīng)。

@ResponseStatus說(shuō)要發(fā)出一個(gè)HttpStatus.NOT_FOUND,即一個(gè)HTTP 404。

建議的主體生成內(nèi)容。在這種情況下,它會(huì)給出異常的消息。

要啟動(dòng)應(yīng)用程序,請(qǐng)右鍵單擊其中并從 IDEpublic static void main中PayRollApplication選擇運(yùn)行,或者:

Spring Initializr 使用 maven 包裝器,所以輸入:

$ ./mvnw clean spring-boot:run

或者使用您安裝的 Maven 版本輸入:

$ mvn clean spring-boot:run

當(dāng)應(yīng)用程序啟動(dòng)時(shí),我們可以立即對(duì)其進(jìn)行詢。

$ curl -v localhost:8080/員工

這將產(chǎn)生:

* 嘗試 ::1...* TCP_NODELAY 設(shè)置* 連接到 localhost (::1) 端口 8080 (#0)> GET /員工 HTTP/1.1> 主機(jī):本地主機(jī):8080> 用戶代理:curl/7.54.0> 接受:*/*>< HTTP/1.1 200< 內(nèi)容類型:application/json;charset=UTF-8< 傳輸編碼:分塊< 日期:格林威治標(biāo)準(zhǔn)時(shí)間 2018 年 8 月 9 日星期四 17:58:00<* 連接 #0 到主機(jī) localhost 保持不變[{"id":1,"name":"Bilbo Baggins","role":"竊賊"},{"id":2,"name":"Frodo Baggins","角色":"小偷"} ]

在這里,您可以看到壓縮格式的預(yù)加載數(shù)據(jù)。

如果您嘗試查詢一個(gè)不存在的用戶......

$ curl -v localhost:8080/employees/99

你得到…

* 嘗試 ::1...* TCP_NODELAY 設(shè)置* 連接到 localhost (::1) 端口 8080 (#0)> 獲取 /employees/99 HTTP/1.1> 主機(jī):本地主機(jī):8080> 用戶代理:curl/7.54.0> 接受:*/*>< HTTP/1.1 404< 內(nèi)容類型: text/plain;charset=UTF-8< 內(nèi)容長(zhǎng)度:26< 日期:格林威治標(biāo)準(zhǔn)時(shí)間 2018 年 8 月 9 日星期四 18:00:56<* 連接 #0 到主機(jī) localhost 保持不變找不到員工 99

此消息很好地顯示了HTTP 404錯(cuò)誤以及自定義消息Could not find employee 99。

顯示當(dāng)前編碼的交互并不難……

如果您使用 Windows 命令提示符發(fā)出 cURL 命令,則以下命令可能無(wú)法正常工作。您必須選擇一個(gè)支持單引號(hào)參數(shù)的終端,或者使用雙引號(hào),然后轉(zhuǎn)義 JSON 中的那些。

要?jiǎng)?chuàng)建新Employee記錄,我們?cè)诮K端中使用以下命令——$開頭的表示后面是終端命令:

$ curl -X POST localhost:8080/employees -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "gardener"}'

然后它存儲(chǔ)新創(chuàng)建的員工并將其發(fā)送回給我們:

{"id":3,"name":"Samwise Gamgee","role":"gardener"}

您可以更新用戶。讓我們改變他的角色。

$ curl -X PUT localhost:8080/employees/3 -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "ring bearer"}'

我們可以看到輸出中反映的變化。

{"id":3,"name":"Samwise Gamgee","role":"戒指持有者"}

您構(gòu)建服務(wù)的方式可能會(huì)產(chǎn)生重大影響。在這種情況下,我們說(shuō)update,但replace是更好的描述。例如,如果未提供名稱,則它將被取消。

最后,您可以像這樣刪除用戶:

$ curl -X DELETE 本地主機(jī):8080/employees/3# 現(xiàn)在如果我們?cè)倏匆槐椋筒灰娏? curl localhost:8080/employees/3找不到員工 3

這一切都很好,但是我們有 RESTful 服務(wù)了嗎?(如果你沒(méi)有聽懂提示,答案是否定的。)

少了什么東西?

......未完待續(xù)......

以上就是今天關(guān)于Spring的一些討論,對(duì)你有幫助嗎?如果你有興趣深入了解,歡迎到Spring中國(guó)教育管理中心留言交流!


本文系作者授權(quán)數(shù)英發(fā)表,內(nèi)容為作者獨(dú)立觀點(diǎn),不代表數(shù)英立場(chǎng)。
轉(zhuǎn)載請(qǐng)?jiān)谖恼麻_頭和結(jié)尾顯眼處標(biāo)注:作者、出處和鏈接。不按規(guī)范轉(zhuǎn)載侵權(quán)必究。
本文系作者授權(quán)數(shù)英發(fā)表,內(nèi)容為作者獨(dú)立觀點(diǎn),不代表數(shù)英立場(chǎng)。
未經(jīng)授權(quán)嚴(yán)禁轉(zhuǎn)載,授權(quán)事宜請(qǐng)聯(lián)系作者本人,侵權(quán)必究。
本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表數(shù)英立場(chǎng)。
本文禁止轉(zhuǎn)載,侵權(quán)必究。
本文系數(shù)英原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載。
授權(quán)事宜請(qǐng)至數(shù)英微信公眾號(hào)(ID: digitaling) 后臺(tái)授權(quán),侵權(quán)必究。

    評(píng)論

    文明發(fā)言,無(wú)意義評(píng)論將很快被刪除,異常行為可能被禁言
    DIGITALING
    登錄后參與評(píng)論

    評(píng)論

    文明發(fā)言,無(wú)意義評(píng)論將很快被刪除,異常行為可能被禁言
    800

    推薦評(píng)論

    暫無(wú)評(píng)論哦,快來(lái)評(píng)論一下吧!

    全部評(píng)論(0條)

    主站蜘蛛池模板: 永州市| 大悟县| 延吉市| 格尔木市| 普格县| 紫云| 平昌县| 玉环县| 会东县| 东阿县| 德庆县| 冕宁县| 临猗县| 鄂尔多斯市| 辉南县| 镇沅| 黔江区| 宾阳县| 奉化市| 河东区| 盐边县| 固安县| 门源| 洛阳市| 沁水县| 望城县| 富平县| 屏边| 山西省| 乌兰浩特市| 霍林郭勒市| 纳雍县| 抚顺市| 章丘市| 南川市| 得荣县| 新邵县| 芜湖县| 阿鲁科尔沁旗| 罗平县| 宜章县|