代码之家  ›  专栏  ›  技术社区  ›  zappee

在Glassfish/Payara上使用JAX-RS进行自定义Json编组

  •  0
  • zappee  · 技术社区  · 7 年前

    我很想知道Glassfish/Payara使用的是JAX-RS的哪个json编组/解编框架,以及如何向其中添加自定义json映射器类。

    我想为我的 Enum 班我使用 provided 我的pom中的范围。JAXR的xml javaee-api

    我试着使用 @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...
            }
        }
    }
    

    还有JAX-RS类,我想在其中发回 ErrorInfo 作为json的实例:

    @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\u ERROR”字符串,而不是int 123456值。

    如果我用多余的 errorInfo.toJson()

    在Glassfish/Payara中,配置/添加额外枚举映射器类到默认JAX-RS json库的正确方法是什么?

    1 回复  |  直到 7 年前
        1
  •  0
  •   OndroMih    7 年前

    默认情况下,Payara服务器使用 MOXy 映射到JSON或从JSON映射。如果你将Jackson添加到应用程序并添加 JacksonFeature 进入JAX-RS类: Force Glassfish4 to use Jackson instead of Moxy

    在即将推出的Payara 5中,它将支持Java EE 8,JSON编组将按照 JSON-Binding