/** * 请求方法的的参数缺失 */ @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) ResponseMessage handleException(MissingServletRequestParameterException exception) { return ResponseMessage .error(HttpStatus.BAD_REQUEST.value(), "参数[" + exception.getParameterName() + "]不能为空"); }
/** * Handle the case when a required parameter is missing. * <p>The default implementation sends an HTTP 400 error, and returns an empty {@code ModelAndView}. * Alternatively, a fallback view could be chosen, or the MissingServletRequestParameterException * could be rethrown as-is. * @param ex the MissingServletRequestParameterException to be handled * @param request current HTTP request * @param response current HTTP response * @param handler the executed handler * @return an empty ModelAndView indicating the exception was handled * @throws IOException potentially thrown from {@link HttpServletResponse#sendError} */ protected ModelAndView handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpServletRequest request, HttpServletResponse response, @Nullable Object handler) throws IOException { response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); }
protected final void validateRequiredParameter(String name, @Nullable Object parameter) throws ServletRequestBindingException { if (parameter == null) { throw new MissingServletRequestParameterException(name, getType()); } }
BusinessException convert(Throwable e) { if (e instanceof BusinessException) { return (BusinessException) e; } if (e instanceof MissingServletRequestParameterException) { MissingServletRequestParameterException me = (MissingServletRequestParameterException) e; String paramKey = me.getParameterName(); String paramType = me.getParameterType(); Logger log = RestPackAspect.getLog(); if (log != null && log.isInfoEnabled()) { log.info("miss param, key = {}, type = {}", paramKey, paramType); } return new BusinessException(ErrorCodes.NULL_PARAM) .put("key", paramKey); } // Error 没有办法拦截,这里只能日志记录异常信息。 if (e instanceof Error) { e.printStackTrace(); Logger log = RestPackAspect.getLog(); if (log != null) { log.error(e.getMessage(), e); } } return new BusinessException(ErrorCodes.UNKNOWN_ERROR, e) .setMessage(e.getClass().getName() + ": " + e.getMessage()); }
@ExceptionHandler(MissingServletRequestParameterException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public R handleError(MissingServletRequestParameterException e) { log.warn("缺少请求参数", e.getMessage()); String message = String.format("缺少必要的请求参数: %s", e.getParameterName()); return R.fail(ResultCode.PARAM_MISS, message); }
@Override protected ResponseEntity<Object> handleMissingServletRequestParameter(final MissingServletRequestParameterException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) { logger.info(ex.getClass().getName()); // final String error = ex.getParameterName() + " parameter is missing"; final ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), error); return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus()); }
@Override protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { MultibankingError error = MultibankingError.builder().status(HttpStatus.BAD_REQUEST) .text(ErrorConstants.ERR_PARAMETER) .renderedMessage(ErrorConstants.ERR_PARAMETER_MESSAGE) .exception(ex).build(); error.getParams().put(ErrorConstants.ERR_PARAMETER_NAME_KEY, ex.getParameterName()); error.getParams().put(ErrorConstants.ERR_PARAMETER_TYPE_KEY, ex.getParameterType()); return handleExceptionInternal(ex, error, headers, error.getStatus(), request); }
StringBuilder builder = new StringBuilder("参数字段"); MissingServletRequestParameterException ex = (MissingServletRequestParameterException) exception; builder.append(ex.getParameterName()); builder.append("校验不通过"); failedResponseBuilder.exception(builder.toString()).msg(ex.getMessage()); return failedResponseBuilder; } else if (exception instanceof MissingPathVariableException) {
@ExceptionHandler(MissingServletRequestParameterException.class) public ResponseEntity<String> handleMissingParams(MissingServletRequestParameterException ex) { Loggers.SRV_LOG.error("got exception.", ex); String name = ex.getParameterName(); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Parameter '" + name + "' is missing"); }
@Override protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { MultibankingError error = MultibankingError.builder().status(HttpStatus.BAD_REQUEST) .text(ErrorConstants.ERR_PARAMETER) .renderedMessage(ErrorConstants.ERR_PARAMETER_MESSAGE) .exception(ex).build(); error.getParams().put(ErrorConstants.ERR_PARAMETER_NAME_KEY, ex.getParameterName()); error.getParams().put(ErrorConstants.ERR_PARAMETER_TYPE_KEY, ex.getParameterType()); return handleExceptionInternal(ex, error, headers, error.getStatus(), request); }
protected final void validateRequiredParameter(String name, @Nullable Object parameter) throws ServletRequestBindingException { if (parameter == null) { throw new MissingServletRequestParameterException(name, getType()); } }
/** * Handle the case when a required parameter is missing. * <p>The default implementation sends an HTTP 400 error, and returns an empty {@code ModelAndView}. * Alternatively, a fallback view could be chosen, or the MissingServletRequestParameterException * could be rethrown as-is. * @param ex the MissingServletRequestParameterException to be handled * @param request current HTTP request * @param response current HTTP response * @param handler the executed handler * @return an empty ModelAndView indicating the exception was handled * @throws IOException potentially thrown from {@link HttpServletResponse#sendError} */ protected ModelAndView handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpServletRequest request, HttpServletResponse response, @Nullable Object handler) throws IOException { response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); }
/** * 通过MissingServletRequestParameterException初始化 * * @param cause * MissingServletRequestParameterException */ public MissingServletRequestParameterExceptionInfo(MissingServletRequestParameterException cause) { super(cause, 403); parameterName = cause.getParameterName(); }
String name = actualException.getParameterName(); String type = actualException.getParameterType();
@Test public void missingServletRequestParameter() { Exception ex = new MissingServletRequestParameterException("param", "type"); testException(ex); }
@ExceptionHandler(value = {MissingServletRequestParameterException.class}) public Result missingServletRequestParameterException(MissingServletRequestParameterException ex) { log.error("missing servlet request parameter exception:{}", ex.getMessage()); return Result.fail(ErrorType.ARGUMENT_NOT_VALID); }
/** * 通过MissingServletRequestParameterException初始化 * * @param cause * MissingServletRequestParameterException */ public MissingServletRequestParameterExceptionInfo(MissingServletRequestParameterException cause) { super(cause, 403); parameterName = cause.getParameterName(); }
@Override protected void handleMissingValue(String name, MethodParameter parameter, NativeWebRequest request) throws Exception { HttpServletRequest servletRequest = request.getNativeRequest(HttpServletRequest.class); if (MultipartResolutionDelegate.isMultipartArgument(parameter)) { if (servletRequest == null || !MultipartResolutionDelegate.isMultipartRequest(servletRequest)) { throw new MultipartException("Current request is not a multipart request"); } else { throw new MissingServletRequestPartException(name); } } else { throw new MissingServletRequestParameterException(name, parameter.getNestedParameterType().getSimpleName()); } }
/** * 错误服务请求参数异常 * @param e * @return */ @ExceptionHandler(MissingServletRequestParameterException.class) public ResultMap handlerRequestMissingServletRequest(MissingServletRequestParameterException e) { logger.error(e.getMessage(), e); return ResultMap.error(400, "错误服务请求参数异常"); }
@ExceptionHandler(MissingServletRequestParameterException.class) public void handleMissingParams(MissingServletRequestParameterException ex) { String name = ex.getParameterName(); System.out.println(name + " parameter is missing"); // Actual exception handling }