```java
import lombok.Getter;
import lombok.AllArgsConstructor;
@Getter
@AllArgsConstructor
public enum DayOfWeek {
MONDAY("Monday", 1),
TUESDAY("Tuesday", 2),
WEDNESDAY("Wednesday", 3),
THURSDAY("Thursday", 4),
FRIDAY("Friday", 5),
SATURDAY("Saturday", 6),
SUNDAY("Sunday", 7);
private String displayName;
private int numericValue;
}
```
```java
DayOfWeek day = DayOfWeek.MONDAY;
System.out.println("Today is " + day.getDisplayName()); // 輸出:Today is Monday
System.out.println("Numeric value of " + day.getDisplayName() + " is " + day.getNumericValue()); // 輸出:Numeric value of Monday is 1
```
# enum json
在 Java 裡,enum.values() 回傳的是該 enum 型別的「陣列物件」(T[],T 為你的 enum),而不是字串陣列。但如果你把它丟到一個常見的 REST 回應(例如 Spring Boot 的 ResponseEntity 或 @RestController)裡,預設的 JSON 序列化(Jackson)又會把 enum 轉成它們的 name()(也就是字串),於是最終送到前端的 JSON 會長這樣:
範例程式
```java
// 定義一個 enum
public enum Color {
RED, GREEN, BLUE;
}
// Controller
@RestController
public class MyController {
@GetMapping("/colors")
public ResponseEntity<Color[]> getColors() {
// 下面這行回傳的型別是 Color[](物件陣列)
Color[] all = Color.values();
return ResponseEntity.ok(all);
}
}
```
在預設狀況下,Spring 會用 Jackson 把 `Color[]` 序列化成
```json
["RED","GREEN","BLUE"]
```
這裡的 JSON 元素是字串,因為 Jackson 預設把 enum 序列化成它的 name()。
要點整理
1. Java 層面:enum.values() → 回傳 T[](真正的 enum 物件陣列)
2. HTTP/JSON 層面:預設序列化成字串陣列(因為 enum 被序成 name())
3. 如果你真的想把 enum 當作「物件」送(例如多一個 code、label 欄位),可以在 enum 上或屬性上加 Jackson 註解:
```java
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Color {
RED(1,"紅色"), GREEN(2,"綠色"), BLUE(3,"藍色");
public final int code;
public final String label;
Color(int code, String label){ this.code=code; this.label=label; }
}
```
如此序列化後就會是
```json
[
{"name":"RED","code":1,"label":"紅色"},
{"name":"GREEN","code":2,"label":"綠色"},
{"name":"BLUE","code":3,"label":"藍色"}
]
```
── 總結:
· Java 端收到/回傳的是 enum 物件陣列 (`Color[]`)
· 預設 JSON 層面則是「字串陣列」 (enum.name()),若要 JSON 物件化需額外設定。