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

无体手柄柱

欧阳正谊
2023-03-14
@Path("data")
public class MyResource {
  @Inject
  MyService service;

  @POST
  @Produces(MediaType.APPLICATION_OCTET_STREAM)
  public byte[] init() {
    return service.init();
  }

  @POST
  @Produces(MediaType.APPLICATION_OCTET_STREAM)
  @Consumes(MediaType.APPLICATION_OCTET_STREAM)
  public byte[] work(byte[] data) {
    return service.work(data);
  }
}
org.jboss.resteasy.spi.BadRequestException: content-type was null and expecting to extract a body into public javax.ws.rs.core.Response rest.MyResource.work(byte[])
        at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:131)
        at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:114)
        at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137)
        at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:252)
        at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:217)
        at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:206)
        at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:514)
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:491)
        at org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:140)
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:204)
        at org.jboss.resteasy.plugins.server.servlet.FilterDispatcher.doFilter(FilterDispatcher.java:59)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:662)

是否有一种方法可以通过JAX-RS来解决这个问题,或者我必须回到servlet来处理这个特定的情况?

共有1个答案

萧越泽
2023-03-14

我不能重现这个问题。考虑以下JAX-RS方法:

@POST
@Path("/bytes")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
public Response postOctetStream(byte[] bytes) {
    return Response.ok(bytes.length).build();
}

考虑以下curl调用:

$ curl -v -X POST -H "Content-Type: application/octet-stream" -d "" http://localhost:8080/WebApplication4/webresources/bytes
* About to connect() to localhost port 8080 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> POST /WebApplication4/webresources/foo/bytes HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:8080
> Accept: */*
> Content-Type: application/octet-stream
> Content-Length: 0
> 
< HTTP/1.1 200 OK
< X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.0  Java/Oracle Corporation/1.7)
< Server: GlassFish Server Open Source Edition  4.0 
< Content-Type: text/plain
< Date: Mon, 09 Dec 2013 10:56:55 GMT
< Content-Length: 1
< 

如您所见,客户机设置content-length:0。服务器可以将这个空正文映射到一个零长度的字节[]

 类似资料:
  • 问题内容: 我正在尝试自己学习编程,但仍在尝试掌握它。我收到以下错误: java.io.IOException:句柄无效 这是我的代码 我相信,每当我调用该方法时,都会出现错误,当我尝试显示默认构造函数中的字节数时,它可以很好地工作并显示。 问题答案: 好了,在实际开始使用它之前,请先关闭构造函数的块。将结束部分从构造函数中移到完成后将被调用的位置,例如在main 下方调用或单独的close方法。

  • 句柄是什么?在Windows中,句柄的存在就像指针的标识一样,但这样的答案显示不是你们需要的。闲暇之余,笔者摘录以下Windows句柄的解释。用户可以端着咖啡再看Windows结构体里面句柄的作用表述。 这里我列举词条中的关于句柄的叙述不当之处,至于如何不当先不管,继续往下看就会明白: 句柄是什么? Windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变

  • 问题内容: 我看起来像这样 我需要选择按钮。但是由于它们都具有相同的名字,我不能通过书写来做到。如果我使用不同的名称,则用户可以进行多个选择。 是否没有办法通过其ID获取按钮的状态?如果没有,处理此表格的最简单方法是什么? 问题答案: 你应该将属性添加到每个字段中: 在烧瓶路径中,你可以阅读所选的选项: 然后你将获得所选单选按钮的。

  • 如何使用方法句柄调用私有方法? 据我所知,只有两种可公开访问的实例: 方法andles.lookup 两者都不允许不受限制的私人访问。 还有非公开的这就是我想要的。是否有某种公开的方式获得它(假设SecurityManager允许)?

  • 在书写代码与阅读代码的时候,经常会看到这一句代码: typedef void *HANDLE ,它是何方神圣呢?如何理解呢? 不理解它的时候,感觉它很神奇,知道它以后,它就是个typedef的定义,只不过是void*类型罢了,也就是HANDLE等价于void *,我们可以叫它披着句柄皮的指针(PS:指针和句柄是有区别的,在这说句废话); 对于void* 神通广大,因为它作为函数参数or函数返回值,

  • 背景。 我的操作系统是Win7 64bit。 我的Python是2.7 64bit(来自Python-2.7.8.amd64.msi) 我的cx_Oracle是5.0 64bit(来自Cx_Oracle-5.0.4-10g-Unicode.win-amd64-py2.7.msi) 我的Oracle客户端是10.1(我不知道32或64 arch,但SQL*Plus是10.1.0.2.0 数据库为 O