首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不重复代码的情况下使用Jackson和Spring绑定将字符串转换为Enum

如何在不重复代码的情况下使用Jackson和Spring绑定将字符串转换为Enum
EN

Stack Overflow用户
提问于 2022-10-31 22:28:06
回答 1查看 26关注 0票数 -1

我有一个定义为:

代码语言:javascript
复制
public static enum State {
    
    @JsonProperty("At Rest")
    AT_REST,
    
    @JsonProperty("In Motion")
    IN_MOTION, 
    
    @JsonProperty("Stalled")
    STALLED;        
} 

因此,当杰克逊将AT_REST枚举序列化为JSON时,服务器会生成"At Rest“。类似地,当客户端将JSON传递给服务器时,Jackson将"At Rest“反序列化为AT_REST。例如:

代码语言:javascript
复制
@GetMapping()
public State[] getAllStates() {
 return State.values(); //returns JSON ["At Rest", "In Motion", "Stalled"]
}

@PostMapping()
public void saveState(@ResponseBody State state /*when client sends "At Rest", it gets converted into Enum*/) { 
 //save state
}

我还有一个搜索获取端点。客户端使用"state“查询参数(如https://localhost/search?state=At Rest )调用它。由于查询参数值不是JSON,所以我有一个Spring转换器:

代码语言:javascript
复制
@Component
public class StringToStateConverter implements Converter<String, State> {
    
    @Override
    public State convert(String description) {
        if ("At Rest".equals(description)) {
            return State.AT_REST;
        } else if ("In Motion".equals(description)) {
            return State.IN_MOTION;
        } else if ("Stalled".equals(description)) {
            return State.STALLED;
        } else {
            return null;
        }
    }
    
}

在反序列化查询参数时,可以让Spring使用JsonProperty吗?如果没有,我如何避免在代码中的多个位置进行字符串描述?我不喜欢在枚举中创建描述字段,因为这实际上只是用于客户端显示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 16:01:00

在反序列化查询参数时可以让Spring使用JsonProperty吗?

是。

代码语言:javascript
复制
@Component
@RequiredArgsConstructor
public class StringToStateConverter implements Converter<String, State> {
    
    private final ObjectMapper mapper;
    
    @Override
    public State convert(String description) {
        
        try {
            return mapper.readValue("\"" + description + "\"", State.class);
        } catch (JsonProcessingException e) {
            // code to return error to client
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74269710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档