当前位置: 首页 > 知识库问答 >
问题:

JAX-RS-找不到以下类型的响应对象的MessageBodyWriter

邰德业
2023-03-14

我试图在JBoss7.2中创建一个JAX-RS示例。我得到如下错误消息。

 import javax.ws.rs.ApplicationPath;
     import javax.ws.rs.Produces;
     import javax.ws.rs.core.Application;


     @ApplicationPath("/rest")
   public class Etag extends Application {
    }
import java.util.Date;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Response.ResponseBuilder;


@Path( "/test" )
public class EtagImpl {

   @GET
   @Produces("image/jpeg")

   @Path("resources/{id}")
      public Response getImage(@PathParam("id") String id, @Context Request request) {

       ImageDAOImpl imageDAO = new ImageDAOImpl();

        Image image = imageDAO.getImage(id);
       CacheControl cc = new CacheControl();
       cc.setMaxAge(172800); // 2 days
       Response.ResponseBuilder rb = null;
       String lastModified = image.getDateModified().toString();
     //  EntityTag etag = new EntityTag(imageDAO.getImage(id).hashCode()+"");
       EntityTag etag = new EntityTag(lastModified.hashCode()+"");
       System.out.println("Writing Response:" + etag);
       rb = request.evaluatePreconditions(etag);
       if (rb != null) 
       {
           return rb.cacheControl(cc).tag(etag).build();
       }

       //If rb is null then either it is first time request; or resource is modified
       //Get the updated representation and return with Etag attached to it
               rb = Response.ok(imageDAO.getImage(id)).cacheControl(cc).tag(etag);
               return rb.build();
    } 

谢谢和问候,拉姆。

共有1个答案

党祖鹤
2023-03-14

这仅仅意味着RestEasy不知道如何将您的Image对象“转换”为您在@Produces注释中指定的mediatype(“Image/jpeg”)。

默认情况下,resteasy只能自动封送和解封送的受支持类型列表有限:

  • java.lang.String
  • 字节[]
  • java.io.InputStream
  • java.io.reader
  • java.io.file
  • javax.activation.datasource
  • javax.xml.transform.source
  • javax.xml.bind.jaxbelement
  • JAXB类,
  • javax.ws.rs.core.MultiValuedMap

最简单的方法是用图像的字节数组表示填充响应。

Response.ok(imageDAO.getImage(id).getBytes()).cacheControl(cc).tag(etag);

另一个选择是编写您自己的MessageBodyWriter,它将负责此转换。有关详细信息,请参阅resteasy文档http://docs.jboss.org/resteasy/docs/3.0.5.final/userguide/html/content_marshalling_providers.html

 类似资料:
  • 消息:找不到类型为java的响应对象的MessageBodyWriter。util。媒体类型的数组列表:application/json 描述:服务器遇到内部错误(找不到类型为java.util.ArrayList,媒体类型为application/json的响应对象的MessageBodyWriter),导致其无法满足此请求 我在类路径中找到了resteasy jackson提供程序。尝试将返回

  • 我正在使用JAX RS 2创建Rest客户端。客户端可以工作,但只有在我的IDE(IntellIJ IDEA)中,当我用Maven构建它时,使用Maven汇编插件并运行jar,它就不再工作了。 我收到的MessageBodyWriter找不到媒体类型=应用程序/json错误。 我尝试过添加其他帖子中建议的更多依赖项,但我不认为依赖项是一个问题,因为它在IDE中运行。 下面是引发异常的代码 调试后,

  • 问题内容: 我正在尝试通过JAX-RS Web服务发送JSON对象。我的文件web.xml是: 为我要发送的对象建模的类是: 根类资源是: 现在,当我尝试访问该服务时,将浏览器指向以下链接 我得到以下错误: 消息org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到针对媒体类型= applicat

  • 我正在尝试将从远程服务获得的响应映射到对象中。对于客户端,我使用的是 JAX-RS 注释接口: 响应采用以下格式,作为对象的JSON列表: 我试图映射到的类是: 它总是返回一个带有空项目列表的项目实例。有什么想法吗? 更新 将其更改为: 返回

  • 问题内容: 使用spring,使用以下代码: 我懂了 pojo的片段: 问题答案: 从Spring的角度来看,没有一个通过注册的实例可以将内容转换为对象。感兴趣的方法是。上述所有回报的实现,包括。 由于没有人可以读取您的HTTP响应,因此处理失败,并出现异常。 如果你能控制服务器响应,修改设置到,或东西匹配。 如果您不控制服务器响应,则需要编写和注册自己的(可以扩展Spring类,see 及其子类

  • org.springframework.web.client.未知内容类型异常:无法提取响应:没有找到适合响应类型[类net.minidev.json.JSONObject]和内容类型[应用程序/json]的HttpMessageConzer endpoint Url还返回JSONObject,因此不知道为什么不匹配