在Spring Boot中使用Jackson自动转换枚举对象和code可以通过以下步骤实现:

  1. 定义枚举类并添加code属性和对应的构造函数:
public enum Gender {
    MALE("M"), FEMALE("F");

    private String code;

    Gender(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }
}
  1. 在实体类中使用枚举类:
public class User {
    private String name;
    private Gender gender;
    
    // getter and setter
}
  1. 配置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());
        }
    }
}
  1. 在控制器中使用实体类:
@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已经自动转换了

springboot中Jackson 枚举对象 和code 自动转换

原文地址: https://www.cveoy.top/t/topic/fWWm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录