【发布时间】:2017-10-03 21:51:16
【问题描述】:
我很想知道 Glassfish/Payara 使用哪个 json 编组/解组框架是 JAX-RS 的情况,以及如何将自定义 json 映射器类添加到其中。
我想为我的Enum 类编写一个自定义序列化程序。我在 pom.xml 中为 jaxrs javaee-api 7.0 使用 provided 范围,因此使用默认的 Glassfish 库。
我尝试使用@JsonValue 并编写了一个实现javax.ws.rs.ext.MessageBodyWriter 和JsonSerializer<T> 的类。也不要像我期望的那样工作。
这是我的枚举类:
public enum ErrorCode {
MY_ERROR(123456);
private int value;
ErrorCode(final int value) {
this.value = value;
}
@JsonValue
public int getValue() {
return value;
}
}
使用枚举的类:
public class ErrorInfo {
private ErrorCode errorCode;
public String toJson() {
try {
return new ObjectMapper().writer().withDefaultPrettyPrinter().writeValueAsString(this);
} catch (JsonProcessingException e) {
// TODO: do something here...
}
}
}
还有我想将 ErrorInfo 实例作为 json 发回的 JAX-RS 类:
@Provider
public class MyExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable throwable) {
...
return Response
.status(errorInfo.getHttpStatus())
.type(ExtendedMediaType.APPLICATION_JSON_UTF8)
.entity(errorInfo)
.build();
}
}
如果我使用上面的代码,那么errorCode 值是“MY_ERROR”字符串而不是 int 123456 值。
如果我使用额外的 errorInfo.toJson() 方法,那么 @JsonValue 注释会发挥作用,但我想避免编写额外的代码来处理枚举序列化问题。
在 Glassfish/Payara 的默认 JAX-RS json 库中配置/添加额外枚举映射器类的正确方法是什么?
【问题讨论】:
标签: java json glassfish jax-rs payara