gpt4 book ai didi

java - 安心服务: Sending HTTP 405 instead of HTTP 500 error

转载 作者:行者123 更新时间:2023-12-02 05:35:16 24 4
gpt4 key购买 nike

有两个问题:
问题 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 })。尝试一下。如果它有帮助,你可以说这是 Jersey 中的一种错误:它实际上应该在部署期间抛出 GET 无法消耗任何内容的异常,或者忽略 @Consume if GET 方法已处理。

关于java - 安心服务: Sending HTTP 405 instead of HTTP 500 error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com