Java Restful服务:发送HTTP 405而不是HTTP 500错误

Java Restful服务:发送HTTP 405而不是HTTP 500错误,java,jax-rs,Java,Jax Rs,有两个问题: 第1期: 当用户没有为一个POST api调用发送任何请求负载时。它相应的RestController方法处理传入的请求并抛出空指针异常。它将HTTP 500错误代码和堆栈跟踪作为错误描述发回。此处将返回HTTP 405 @POST @Path("/create") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public Response createEnt

有两个问题:
第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;
}

第二期:
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

未找到MIME媒体类型应用程序/八位字节流

第一种情况很清楚。405表示“不允许使用方法”。若特定URL不能响应当前方法的请求,则通常由容器或框架抛出。但您确实使用了正确的方法,但其主体是空的,这会导致代码中出现NPE。在这种情况下,预计状态为500

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

编辑:


在发布了一些代码之后,我可以说GET请求不能使用任何东西。从
findMyEntityById()
中删除@Consumes({MediaType.APPLICATION_JSON})。试试看。如果它有帮助的话,您可以说它是Jersey中的一种bug:它实际上应该在部署期间抛出异常,GET不能使用任何东西,或者如果处理了
GET
方法,则忽略
@consume

@Brad添加了api方法。