什么是枚举?
- 枚举是一个特殊的类,它表示一组有限的值。在Java中,枚举类型是用于定义命名常量的一种方式。枚举常量是静态的、最终的和公共的,它们可以在整个应用程序中使用,而且具有自己的名称和值。
- 它是将常量分组为一组的一种方法。枚举可以作为常量池使用,这样可以提高代码的可读性和可维护性。枚举在Java中非常有用,因为它们可以减少代码中的硬编码,并使代码更加自然和易于理解。
枚举类
package cn.itcast.user.enums;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
/**
* @author 性别
*/
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Gender {
/**
* 男士
*/
MALE(1, "男士"),
/**
* 女士
*/
FEMALE(2, "女士");
/**
* 编码
*/
private final Integer code;
/**
* 注释
*/
//@JsonValue
private final String desc;
Gender(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static Gender fromString(String value) {
if (value == null) {
return null;
}
for (Gender gender : Gender.values()) {
if (gender.name().equalsIgnoreCase(value)) {
return gender;
}
}
return null;
}
public static Gender fromCode(Integer code) {
if (code == null) {
return null;
}
for (Gender gender : Gender.values()) {
if (gender.getCode().equals(code)) {
return gender;
}
}
throw new IllegalArgumentException("Invalid code: " + code);
}
}
entity
package cn.itcast.user.pojo;
import cn.itcast.user.enums.Gender;
import lombok.Data;
import org.springframework.web.bind.annotation.ModelAttribute;
@Data
public class Person {
private Long id;
private String name;
private Gender gender;
@ModelAttribute("gender")
public void setGender(Gender gender) {
this.gender = gender;
}
}
controller
package cn.itcast.user.controller;
import cn.itcast.user.enums.Gender;
import cn.itcast.user.pojo.Person;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("enum/test")
@Slf4j
public class EnumController {
// 枚举是一个特殊的类,它表示一组有限的值。在Java中,枚举类型是用于定义命名常量的一种方式。枚举常量是静态的、最终的和公共的,它们可以在整个应用程序中使用,而且具有自己的名称和值。
// 它是将常量分组为一组的一种方法。枚举可以作为常量池使用,这样可以提高代码的可读性和可维护性。枚举在Java中非常有用,因为它们可以减少代码中的硬编码,并使代码更加自然和易于理解
// http://localhost:8081/enum/test/getTest01?gender=MALE
// 返回结果:
// {
// "code": 1,
// "desc": "男士"
//}
@GetMapping("getTest01")
@ResponseBody
public Gender getTest01(@ModelAttribute("gender") Gender gender) {
return gender;
}
@GetMapping("getTest02")
public Person getTest02(Person person) {
return person;
}
@PostMapping("postTest01")
@ResponseBody
public Gender postTest01(@ModelAttribute("gender") Gender gender) {
return gender;
}
@PostMapping("postTest02")
public Person postTest02(@RequestBody Person person) {
return person;
}
@PutMapping("putTest01")
public Gender putTest01(@ModelAttribute("gender") Gender gender) {
return gender;
}
@PutMapping("putTest02")
public Gender putTest02(@RequestBody Person person) {
return person.getGender();
}
@PutMapping("putTest03")
public Person putTest03(@RequestBody Person person) {
return person;
}
}