我有一个定义为:
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。例如:
@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转换器:
@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吗?如果没有,我如何避免在代码中的多个位置进行字符串描述?我不喜欢在枚举中创建描述字段,因为这实际上只是用于客户端显示。
发布于 2022-11-01 16:01:00
在反序列化查询参数时可以让Spring使用JsonProperty吗?
是。
@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
}
}https://stackoverflow.com/questions/74269710
复制相似问题