我使用Spring mvc,我的问题是关于sendError
的{{1}}方法。
有人可以告诉我哪个是最好的:
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);
}
方法。
有人可以解释两种解决方案的优缺点吗?
答案 0 :(得分:0)
两者之间的主要区别是sendError(int)
设置并锁定响应(在调用sendError后无法更改它),它将显示错误页面。
另一方面,setStatus(int)
方法允许您在设置状态后更改响应,并且不会调用错误页面。
因此,如果出现错误并且您不必准备特定的回复并在所有其他情况下使用sendError
,则基本上使用setStatus
。
Java EE documentation of the setStatus() method:
中也对此进行了解释如果使用此方法设置错误代码,则不会触发容器的错误页面机制。如果出现错误并且调用者希望调用Web应用程序中定义的错误页面,则必须使用sendError(int,java.lang.String)。