java - jackson - 从 GET Api 返回 JSON POJO 时未找到 MessageBodyWriter

标签 java json jersey jackson jax-rs

我试图使用 jackson 返回一个简单的 json 响应。

@GET
    @Produces(MediaType.APPLICATION_JSON)
    public FMSResponseInfo test(){
        System.out.println("Entered the function");
        FMSResponseInfo fmsResponseInfo = new FMSResponseInfo();
        List<SearchDetailsDTO> searchDetailsDtoList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            SearchDetailsDTO searchDetailsDto = new SearchDetailsDTO();
            searchDetailsDto.setBarcode("barcode" + i);
            searchDetailsDto.setDocNo("docNo" + i);
            searchDetailsDto.setDocType("docType" + i);
            searchDetailsDtoList.add(searchDetailsDto);
        }
        fmsResponseInfo.setStatus("200");
        fmsResponseInfo.setMessage("Success");
        fmsResponseInfo.setData(searchDetailsDtoList);
        System.out.println("Exiting the function");
        return fmsResponseInfo;
    }

这是代码。当函数尝试返回 FMSResponseInfo(POJO)时:

package com.fms.core;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "status", "message", "data" })
public class FMSResponseInfo {
    @JsonProperty("status")
    private String status;
    @JsonProperty("message")
    private String message;
    @JsonProperty("data")
    private Object data;
    //Getters and Setters
}

这是将被发回的 pojo。

但是一旦函数尝试返回 this ,我就会收到此异常:

May 14, 2015 9:54:57 AM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo SEVERE: MessageBodyWriter not found for media type=application/json, type=class com.fms.core.FMSResponseInfo, genericType=class com.fms.core.FMSResponseInfo.

我已经包含了 jackson-annotation-2.4.2.jar、jackson-core-2.4.2.jar 和 jackson-databind-2.4.2.jar。这些是我包含的三个 jackson jar 以及 jersey 2.16、hibernate 和 mysql 所需的其他 jar。

请帮我解决这个问题!!

最佳答案

您需要的不仅仅是 Jackson,您还需要 Jackson JAX-RS 提供商。

enter image description here

然后在 web.xml 中注册它

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>
        your.resource.provider.package,
        com.fasterxml.jackson.jaxrs.json
    </param-value>
</init-param>

或者在您的ResourceConfig

packages("your.resource.provider.packgae",
         "com.fasterxml.jackson.jaxrs.json");

关于java - jackson - 从 GET Api 返回 JSON POJO 时未找到 MessageBodyWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30229285/

相关文章:

javascript - 本地存储迭代获取for循环内单击按钮的值

ios - 如何在 Swift 2.0 中从数组内部的数组中提取 JSON 数据

java - 如何使用 Javaparser 解析 for 循环?

java - 如果我指定了错误的端口号,为什么 LocateRegistry.getRegistry() 不会失败?

java - Spring - java.io.FileNotFoundException : class path resource cannot be opened because it does not exist

java - 在父类(super class)构造函数中创建子类对象进入无限循环java

javascript - 像 jquery 一样在 PHP 中使用每个

java - HK2 服务具体化失败 javax.ws.rs.core.UriInfo 日志中出现警告,异常为 : Could not find a suitable constructor in UriInfo class

java - 带有 asynchttpclient 的 JSON 帖子

jaxb - Jersey + Moxy + JAXB - 如何在没有注释的情况下编码 XML