自定义异常未提供正确的消息,Spring?

huangapple 未分类评论50阅读模式
标题翻译

Custom exception not giving correct message, spring?

问题

我已将自定义异常类添加到我的API类中。

异常类

@SuppressWarnings({ "unchecked", "rawtypes" })
@ControllerAdvice
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
        List<String> details = new ArrayList<>();
        details.add(ex.getLocalizedMessage());
        ErrorMessage error = new ErrorMessage("服务器错误", details);
        return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(RecordNotFoundException.class)
    public final ResponseEntity<Object> handleConfigNotFoundException(RecordNotFoundException ex, WebRequest request) {
        List<String> details = new ArrayList<>();
        details.add(ex.getLocalizedMessage());
        ErrorMessage error = new ErrorMessage("记录未找到", details);
        return new ResponseEntity(error, HttpStatus.NOT_FOUND);
    }

    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
            HttpHeaders headers, HttpStatus status, WebRequest request) {
        List<String> details = new ArrayList<>();
        for (ObjectError error : ex.getBindingResult().getAllErrors()) {
            details.add(error.getDefaultMessage());
        }
        ErrorMessage error = new ErrorMessage("验证失败", details);
        return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
    }
}

API方法

@RequestMapping(value = "/config", params = { "appCode", "appVersion" }, method = RequestMethod.GET)
public ResponseEntity<ConfigResponse> getConfig(@RequestParam(value = "appCode", required = true) String appCode,
        @RequestParam(value = "appVersion", required = true) String appVersion) {
    List<AppConfig> result = configRepository.findByCodeAndVersion(appCode, appVersion);
    if (result.isEmpty()) {
        throw new RecordNotFoundException(appCode + "或" + appVersion + "不存在");
    }

    AppConfig config = new AppConfig();
    return new ResponseEntity<ConfigResponse>(config.convertToResponse(result), HttpStatus.OK);
}

记录未找到

@ResponseStatus(HttpStatus.NOT_FOUND)
public class RecordNotFoundException extends RuntimeException {
    public RecordNotFoundException(String exception) {
        super(exception);
    }
}

我正在检查记录是否未找到,但它仍然给我Spring异常而不是我的自定义异常。

英文翻译

I have added customexception class to handle my api class.

Exception class

@SuppressWarnings({ &quot;unchecked&quot;, &quot;rawtypes&quot; })
@ControllerAdvice
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(Exception.class)
public final ResponseEntity&lt;Object&gt; handleAllExceptions(Exception ex, WebRequest request) {
	List&lt;String&gt; details = new ArrayList&lt;&gt;();
	details.add(ex.getLocalizedMessage());
	ErrorMessage error = new ErrorMessage(&quot;Server Error&quot;, details);
	return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);
}

@ExceptionHandler(RecordNotFoundException.class)
public final ResponseEntity&lt;Object&gt; handleConfigNotFoundException(RecordNotFoundException ex, WebRequest request) {
	List&lt;String&gt; details = new ArrayList&lt;&gt;();
	details.add(ex.getLocalizedMessage());
	ErrorMessage error = new ErrorMessage(&quot;Record Not Found&quot;, details);
	return new ResponseEntity(error, HttpStatus.NOT_FOUND);
}

@Override
protected ResponseEntity&lt;Object&gt; handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
		HttpHeaders headers, HttpStatus status, WebRequest request) {
	List&lt;String&gt; details = new ArrayList&lt;&gt;();
	for (ObjectError error : ex.getBindingResult().getAllErrors()) {
		details.add(error.getDefaultMessage());
	}
	ErrorMessage error = new ErrorMessage(&quot;Validation Failed&quot;, details);
	return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
}
}

API method

	@RequestMapping(value = &quot;/config&quot;, params = { &quot;appCode&quot;, &quot;appVersion&quot; }, method = RequestMethod.GET)
public ResponseEntity&lt;ConfigResponse&gt; getConfig(@RequestParam(value = &quot;appCode&quot;, required = true) String appCode,
		@RequestParam(value = &quot;appVersion&quot;, required = true) String appVersion) {
	List&lt;AppConfig&gt; result = configRepository.findByCodeAndVersion(appCode, appVersion);
	if (result.isEmpty()) {
		throw new RecordNotFoundException(appCode + &quot; or &quot; + appVersion + &quot;does not exist&quot;);
	}

	AppConfig config = new AppConfig();
	return new ResponseEntity&lt;ConfigResponse&gt;(config.convertToResponse(result), HttpStatus.OK);

}

Record Not found

@ResponseStatus(HttpStatus.NOT_FOUND)
public class RecordNotFoundException extends RuntimeException {
public RecordNotFoundException(String exception) {
	super(exception);
}
}

I am checking for the record not found but it still gives me the spring exception and not my custom exception.

huangapple
  • 本文由 发表于 2020年5月30日 17:23:56
  • 转载请务必保留本文链接:https://java.coder-hub.com/62100425.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定