长话短说:我正在创建应该100%REST的API。我正在尝试覆盖以下情况的默认响应:我的@RestController中有一个方法,该方法具有@RequestBody作为属性
@RequestMapping(value = {"register"}, method = RequestMethod.POST, produces = "application/hal+json")
public Resource<User> registerClient(@RequestBody User user, HttpServletRequest request)
如果我发送适当的请求,该方法就可以正常工作。但是,如果我不这样做,就会出现问题。当请求的主体为空时,我得到状态为400的通用Tomcat错误页面,我需要它仅发送字符串或JSON对象。
到目前为止,我试图在RestControllerAdvice中为org.springframework.web.binding包中的所有Spring异常添加异常处理程序,但是它也不起作用。
我已经知道,对于某些与安全性相关的错误,必须在配置中创建处理程序,但是我不知道是否是这种情况。
有没有人遇到类似的问题?有什么我想念的吗?
解决方案是在RequestBody批注中简单地将required = false放入。之后,我可以轻松添加一些逻辑以引发自定义异常并在ControllerAdvice中对其进行处理。
@RequestMapping(value = {"register"}, method = RequestMethod.POST, produces = "application/hal+json")
public Resource<User> registerClient(@RequestBody(required = false) User user, HttpServletRequest request){
logger.debug("addClient() requested from {}; registration of user ({})", getClientIp(request), user);
if(user == null){
throw new BadRequestException()
.setErrorCode(ErrorCode.USER_IS_NULL.toString())
.setErrorMessage("Wrong body or no body in reqest");
} (...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句