茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1673006 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_00025.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2021/12/18 5:30:23

Servlet simple Restful API

Servlet實現Restful API簡單範例。

最近碰到沒用框架單用Servlet硬幹Restful API的老舊專案,已經好久沒碰Servet這Java Web底層的東西,所以試驗一下。

範例環境:

  • Eclipse
  • Java 1.8
  • Servlet 4.0
  • Maven

首先使用 maven-archetype-webapp建立一個Maven Web專案 servlet-demo。context path預設為專案名稱。

WEB-INF/web.xml設定 DemoServlet<servlet-mapping>,將context path下 /demo開頭的請求都導向給 DemoServlet處理。

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>Servlet Web Application</display-name>
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>com.abc.demo.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/demo/*</url-pattern>
</servlet-mapping>
</web-app>


建立 DemoServlet繼承 HttpServlet,負責處理請求的Restful API。

DemoServlet


package com.abc.demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import com.abc.demo.dto.ApiResposne;
import com.abc.demo.dto.EmployeeDto;
import com.fasterxml.jackson.databind.ObjectMapper;
public class DemoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DemoServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String pathInfo = request.getPathInfo();
if (StringUtils.isEmpty(pathInfo)) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "";
PrintWriter writer = response.getWriter();
if ("/employee".equalsIgnoreCase(pathInfo)) {
EmployeeDto employeeDto = new EmployeeDto(1L, "john", "john@abc.com", 28);
ApiResposne apiResposne = new ApiResposne("success", employeeDto);
jsonString = objectMapper.writeValueAsString(apiResposne);
writer.write(jsonString);
return;
}
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}


DemoServlet.doGet()程式中用到的值類別。

EmployeeDto


package com.abc.demo.dto;
public class EmployeeDto {
private Long id;
private String name;
private String email;
private Integer age;
public EmployeeDto(Long id, String name, String email, Integer age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
}
// getters and setters
}


ApiResposne


package com.abc.demo.dto;
public class ApiResposne {
private String message;
private Object data;
public ApiResposne(String message, Object data) {
this.message = message;
this.data = data;
}
// getters and setters
}


以上邏輯建立的API為 GET|/demo/employeedoGet()是用來處理HTTP GET請求的方法。若url輸入正確會把 EmployeeDto轉為json字串回應出去。

設定完以上後啟動專案。

使用Postman測試,在url欄位使用 GET,位址輸入 http://localhost:8080/servlet-demo/demo/employee送出請求。

回應結果如下。


{"message":"success","data":{"id":1,"name":"john","email":"john@abc.com","age":28}}


參考 github



原文出處:菜鳥工程師 肉豬: Servlet simple Restful API
*/
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|