springboot中Jackson 枚举对象 和code 自动转换
在Spring Boot中使用Jackson自动转换枚举对象和code可以通过以下步骤实现:
- 定义枚举类并添加code属性和对应的构造函数:
public enum Gender {
MALE("M"), FEMALE("F");
private String code;
Gender(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
- 在实体类中使用枚举类:
public class User {
private String name;
private Gender gender;
// getter and setter
}
- 配置Jackson的ObjectMapper,使其能够自动转换枚举对象和code:
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Gender.class, new GenderDeserializer());
module.addSerializer(Gender.class, new GenderSerializer());
objectMapper.registerModule(module);
return objectMapper;
}
private static class GenderDeserializer extends JsonDeserializer<Gender> {
@Override
public Gender deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String code = p.getValueAsString();
return Gender.valueOf(code.toUpperCase());
}
}
private static class GenderSerializer extends JsonSerializer<Gender> {
@Override
public void serialize(Gender value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.getCode());
}
}
}
- 在控制器中使用实体类:
@RestController
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody User user) {
return user;
}
}
现在,当我们发送以下请求时:
POST /user
{
"name": "John",
"gender": "M"
}
我们将得到以下响应:
{
"name": "John",
"gender": "M"
}
可以看到,枚举对象和code已经自动转换了
原文地址: https://www.cveoy.top/t/topic/fWWm 著作权归作者所有。请勿转载和采集!