Basic Spring Part 2 - Create Project & Start Web Application

Basic Spring Part 2 - Create Project & Start Web Application

ผมเขียนเกี่ยวกับ Spring ไว้หลายตอน คุณสามารถกด Link ด้านล่างเพื่ออ่านที่เกี่ยวกับ Spring ตอนต่างๆได้เลย

ตอนนี้เราจะมาเริ่มสร้าง Web application กัน โดยขั้นแรกต้องมี IDE ที่ใช้เขียน Code กันก่อน โดยผมจะใช้เป็น IntelliJ สามารถ Download ได้ตาม Link นี้ ส่วนท่านอื่นจะใช้ eclipse หรือ netbean ก็ได้ไม่มีปัญหาครับ แต่ภาพที่จะแสดงจะใช้ของ IntelliJ เป็นหลัก

Init project

สำหรับหลายคนอาจจะถามว่าจะเริ่มสร้าง Project ยังไง แต่ละ IDE สร้างมาก็หน้าตาไม่เหมือนกัน อันนี้ Spring เขามี Web ที่ช่วยให้เราสร้าง Project ของ spring ง่ายๆแล้ว โดยกดเข้าไปที่ https://start.spring.io/ นี้ จากนั้นลองตั้งค่าตามภาพ

ด้านขวาที่เป็น Dependency นั้นตอนนี้ Add ไปสองตัวคือ

  • Spring web

อันนี้เป็นส่วนที่ทำงานเกี่ยวกับ Web Application server ทำให้สามารถสร้าง web application server ได้ง่าย

  • Lombok

อันนี้เป็น Lib ช่วยทำ Getter Setter ให้ จะได้ไม่ต้องทำการเขียน Getter Setter เอง

จากนั้นทำการกด Generate จะได้ไฟล์ zip มา จากนั้นทำการแตกไฟล์ zip จะได้ Folder ออกมาจากนั้นใช้ Intelij เปิด Folder นั้น ซึ่งจะได้ดังภาพ

จากนั้นคลิกที่ไฟล์ WebApplication จากนั้นกดที่ลูกศรสีเขียวเพื่อ start : web application server ซึ่งจะได้ผลดังภาพ

คราวนี้มาเข้าผ่าน Browser ดูครับว่าเราได้สร้าง Web application server ได้ไหม โดยเข้าผ่าน url : http://127.0.0.1:8080/ ซึ่งจะได้ผลดังภาพ

เห็นมันขึ้น Error ไม่ต้องตกใจครับ เพราะเราไม่ได้ map path : / ไว้กับการทำงานอะไรเลยมันเลย Error 404 Not found แต่อันนี้ก็จะเห็นว่าเราสามารถ Start web application server ขึ้นมาได้แล้ว

Annotation กับ Spring

ต่อจากนี้จะเริ่มมีเขียน Code มากขึ้นเรื่อยๆ ซึ่งเพื่อป้องกันการพิมพ์ผิดหรือเกิดไม่อยากพิมพ์ก็สามารถไปดู Code ตัวเต็มได้ที่ github โอเคเรามาเริ่มกันเลย

Annotation คืออะไร อ่าผมไม่ชอบอธิบายอะไรพวกนี้เหมือนกันเอาเป็นว่ามีคนอธิบายเรื่องพวกนี้ไว้แล้วซึ่งน่าจะอธิบายดีกว่าผมแน่นอน โดยสำหรับผม Annotation คือการประกาศบางอย่างไว้เพื่อให้ตัวโปรแกรมสามารถมาใช้ประโยชน์ได้ภายหลัง ซึ่งตัว Spring framework ก็มีการสร้าง Annotation ของตัวขึ้นมาใช้เหมือนกัน

1
2
3
4
5
6
7
8
9
10
11
12
package test.spring.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebApplication {

public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}

อันนี้ตัวแรกที่เราเห็นกันเลยก็คือ @SpringBootApplication อันนี้เป็นตัวบอกว่า Class ที่ Run นี้เป็น SpringBoot ครับ ถ้าเราลองลบ @SpringBootApplication ออกดูจะเห็นว่าเกิดการ Error เพราะว่าตอน Run ตัว SpringFramework นั้นจะมีการไล่ Scan annotation เพื่อนำไป Config ส่วนที่จำเป็นในการ Start Server

สร้างตัวจัดการ Request จาก Client

ตัวจัดการ Request จาก Client ของ Spring Framework นั้นจะเรียกว่า Controller ดังนั้นเรามาสร้าง Controller กันเลย โดยสร้าง class : HelloWorldController ที่ package : test.spring.web.controller

1
2
3
4
5
6
7
8
9
10
11
12
13
package test.spring.web.controller;

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

@RestController
public class HelloWorldController {

@GetMapping("/test/helloworld")
public String helloWorld() {
return "Hello world";
}
}
1
@RestController

ส่วนนี้เป็นการบอกว่า Class นี้จะเป็นตัวจัดการ Client นะ

1
2
3
4
@GetMapping("/test/helloworld")
public String helloWorld() {
return "Hello world";
}

ตรงส่วน @GetMapping นั้นเป็นการบอกว่า Method : helloWorld() นั้นจะรับ Request จาก Client ที่ยิงมาที่ /test/helloworld ด้วย Http method GET

ซึ่งเมื่อลองเปิด Browser แล้วกดไปที่ http://127.0.0.1:8080/test/helloworld จะได้ผลลัพธ์ดังภาพ

โดยการทำงานของ Spring ก็ไม่มีอะไรมากครับ ก็ตอน Start ตัว Server ตัว Spring framework ก็จะไปอ่าน Annotation ต่างๆภายใต้ package : test.spring.web ซึ่งก็ได้เจอ @RestController ซึ่งทำให้รู้ว่า Class นี้เป็นตัว Handle Request ที่มาจาก Client จากนั้นไปเจอ @GetMapping(“/test/helloworld”) ก็ทราบว่า Method helloWorld (method ที่ annotation ) จะ Handle request ที่ยิงมาที่ /test/helloworld ซึ่งจะเห็นว่ามันง่ายมากๆแค่ประกาศ Annotation ตัว Spring จะไปทำการจัดการต่อให้เองทั้งหมด

รับ Http Method Post

ทำการเพิ่มอีก Method เข้าไปใน Class : HelloWorldController ตาม Code ด้านล่างนี้

1
2
3
4
5
6
7
8
@PostMapping("/test/echo")
public EchoResponseDto echo(
@RequestBody EchoRequestDto request
) {
EchoResponseDto echoResponseDto = new EchoResponseDto();
echoResponseDto.setEchoMessage("echo : " + request.getMessage());
return echoResponseDto;
}

ส่วนตัว EchoResponseDto , EchoRequestDto code ตามนี้

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package test.spring.web.dto.request;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
@EqualsAndHashCode
@ToString
public class EchoRequestDto {
private String message;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package test.spring.web.dto.response;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
@EqualsAndHashCode
@ToString
public class EchoResponseDto {
private String echoMessage;
}
1
@PostMapping("/test/echo")

ตรงนี้บอกว่ารับ Http request ที่ path : /test/echo โดยรับ method Post

1
2
3
public EchoResponseDto echo(
@RequestBody EchoRequestDto request
) {

ตรงนี้ของใหม่ครับ @RequestBody ส่วนนี้เป็นการบอกว่า Request Body ที่เป็น Json นั้นมีโครงสร้างยังไงโดยจาก Code ข้างบนคือ EchoRequestDto โดยเมื่อทำงานเสร็จแล้วจะ Return : EchoResponseDto เพื่อไปเป็น Http Response Body ในแบบ Json โดยเมื่อลอง Start server แล้วยิงด้วย Postman จะได้ผลลัพธ์ดังภาพ

สรุป

สำหรับตอนนี้เราได้รู้แล้วว่า Annotation คืออะไร การทำงานของ Spring framework นั้นทำงานยังไงกับ Annotation (scan Annotation แล้ว Config ส่วนต่างๆ) แล้วก็สร้าง Controller ของ Spring ไว้รับ Request จาก client ได้แล้วผ่านการใช้ Annotation ของ Spring ไม่ว่าจะเป็น @RestController , @GetMapping, @PostMapping, @RequestBody ก็จบตอนนี้ก็สามารถสร้าง Web application server ที่ยังไม่ต่อ Database ได้แล้ว ในตอนต่อไป เราจะมาพูดถึงการใช้งาน Dependency Injection ของ Spring

เพลงประกอบการเขียน Blog

เพลงนี้ฟังสบายมากๆ ความหมายดีอีกต่างหาก โดยสามารถติดตามวงนี้ได้ที่ The X_Official