如何解决找不到 MessageBodyWriter?

How to resolve MessageBodyWriter not found?

错误: org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteToSEVERE:找不到媒体类型=application/vnd.xyzcompany.v1+json的MessageBodyWriter,类型=class model.OrderStatus,genericType=class model.OrderStatu

OrderStatus 是一个模型 class。

尝试 return class OrderStatus 的对象时遇到此问题。

主要原因是媒体类型,当我使用 application/json 尝试时它有效,但需要使用 自定义媒体来完成类型 像:application/vnd.xyzcompany.v1+json

额外信息: @Produces 和@Consumes 与相同的媒体类型一起使用,OrderStatus class 在请求的响应中定义。

在我阅读的大部分内容中发现,自定义 mime/media 类型需要注册,但不知道如何注册和实现。

任何人都可以帮助解决这个问题。

提前致谢:)

使用自定义 media/mime 类型和 serializing/deserializing 根据新媒体类型接收或发送的对象。

它只需要带有“@Provider”注释和“@Produces”的class。 produces 注释将写为:@Produces({"application/customType.v1+json", "application/json"}).

具有对象映射器序列化和反序列化的 constructor/method。

注意:将此 class 保存在所有 API class 所在的包中。

示例代码:

@Provider
@Produces({MediaType.APPLICATION_JSON, "application/customType.v1+json"})
public class JacksonJsonProvider extends JacksonJaxbJsonProvider {

    public JacksonJsonProvider() {

        ObjectMapper objectMapper = new ObjectMapper()
            .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
            .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .registerModule(new JodaModule())
            .setDateFormat(new RFC3339DateFormat());

        setMapper(objectMapper);
    }
}