gpt4 book ai didi

spring-mvc - HttpServletResponse.sendError(int sc) vs HttpServletResponse.setStatus(int sc)

转载 作者:行者123 更新时间:2023-12-05 01:33:07 27 4
gpt4 key购买 nike

我使用 Spring mvc,我的问题是关于 sendError方法来自 HttpServletResponse .

有人可以告诉我哪个最好:

@RequestMapping(method = RequestMethod.POST, produces = "application/json")
public void createAdvertisement(@RequestBody @Validated(value = ValidationGroups.AdvertisementCreateUpdate.class) Advertisement advertisement, BindingResult bindingResult,
HttpServletResponse response, @CurrentMember Member member) {
if (bindingResult.hasErrors()) {
response.setStatus(SC_BAD_REQUEST);
return;
}
response.setStatus(SC_CREATED);
advertisementService.createAdvertisement(member, advertisement);
}

然后:
@RequestMapping(method = RequestMethod.POST, produces = "application/json")
public void createAdvertisement(@RequestBody @Validated(value = ValidationGroups.AdvertisementCreateUpdate.class) Advertisement advertisement, BindingResult bindingResult,
HttpServletResponse response, @CurrentMember Member member) {
if (bindingResult.hasErrors()) {
response.sendError(SC_BAD_REQUEST);
}
response.setStatus(SC_CREATED);
advertisementService.createAdvertisement(member, advertisement);
}

请注意,在第一个代码片段中,我设置了状态代码并返回,而在第二个代码片段中,我使用了 sendError方法。

有人可以解释一下这两种解决方案的优缺点吗?

最佳答案

两者的主要区别在于sendError(int)设置并锁定响应(调用 sendError 后不能更改它),它将显示错误页面。
setStatus(int)另一方面,方法允许您在设置状态后更改响应,而且它不会调用错误页面。

所以基本上使用sendError如果出现错误并且您不必准备特定的响应并使用 setStatus对于所有其他情况。

这在 Java EE documentation of the setStatus() method: 中也有解释。

If this method is used to set an error code, then the container's error page mechanism will not be triggered. If there is an error and the caller wishes to invoke an error page defined in the web application, then sendError(int, java.lang.String) must be used instead.

关于spring-mvc - HttpServletResponse.sendError(int sc) vs HttpServletResponse.setStatus(int sc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32474310/

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