繁体   English   中英

Restful Services:发送HTTP 405而不是HTTP 500错误

[英]Restful Services: Sending HTTP 405 instead of HTTP 500 error

有两个问题:
问题1:
当用户未为POST api调用之一发送任何请求有效负载时。 其对应的RestController方法,处理传入的请求并引发空指针异常。 它发回HTTP 500错误代码和堆栈跟踪作为错误描述。
HTTP 405预计将返回此处。

@POST
@Path("/create")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public Response createEntity(MyEntity entity) 
{
 EntityRequest req = new EntityRequest();
 req.setName(entity.getName());//throws NPE here
 //few more lines to send req to backend and get the response back
 return response;
}


问题2:
GET请求API实现。

@GET
@Path("/entity/{entityId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON})
public Response findMyEntityById(
        @PathParam("entityId") String id) 
{
  EntityRequest req = new EntityRequest();
  //similar stuff and sends the response back
  return response;
}

问题是用户是否点击了http://localhost:8080/entities/entity/12并发送POST请求而不是GET API应该抛出405,但现在抛出500。 实际堆栈跟踪:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException and MIME media type application/octet-stream was not found

第一种情况很明显。 405表示“不允许使用方法”。 如果特定的URL无法回复当前方法的请求,则通常由容器或框架抛出。 但是,您确实使用了正确的方法,但是主体为空,导致代码中出现NPE。 在这种情况下,预期状态为500。

问题2尚不清楚。 您应该发送更多详细信息。 您要么不发送POST,要么URL可以接受POST。 请仔细检查并发送有关您的配置,一些代码段等的详细信息。

编辑:

发布一些代码后,我可以说GET请求不能使用任何东西。 findMyEntityById()删除@Consumes({MediaType.APPLICATION_JSON} findMyEntityById() 试试吧。 如果有帮助,您可以说这是Jersey中的一种错误:实际上,它应该在部署过程中引发GET无法消耗任何东西的异常,或者在处理GET方法时忽略@Consume

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM