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方法。