在我的spring boot应用程序中,我有一个用于post请求的控制器,它生成和使用JSON请求,并且我为这个控制器定义了@ExceptionHandler,它使用HttpMediaTypeNotAcceptableException来捕获HttpMediaTypeNotAcceptableException(406状态代码)异常。
现在,每当我调用带有错误的ACCEPT头(如application/pdf)的post请求时,定义的异常就不会被调用。
@RestController
@RequestMapping("/school")
public class SchoolCotroller {
@Autowired
private SchoolService schoolService;
@PostMapping(produces = "Application/Json", consumes = "Application/Json")
@ResponseStatus(HttpStatus.CREATED)
public School postData(@Valid @RequestBody School school) {
return schoolService.save(school);
}
@ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
String handleMediaTypeNotAcceptable(
final HttpMediaTypeNotAcceptableException exception,
final NativeWebRequest request) {
return "acceptable MIME type:" + MediaType.APPLICATION_JSON_VALUE;
}
}
curl --location --request POST 'http://localhost:8080/school' \
--header 'Accept: application/pdf' \
--header 'Content-Type: application/json' \
--data-raw '{
"studentName":"mayank",
"course":1,
"teacher":"e",
"id":1
}'
为什么它不调用所需的ExceptionHandler方法?
也许springboot在识别消费和产生类型为application/json
时遇到了困难,因为您在endpoint将其提供为“application/json”
。尝试以下代码:
@RestController
@RequestMapping("/school")
public class SchoolCotroller {
@Autowired
private SchoolService schoolService;
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE , consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public School postData(@Valid @RequestBody School school) {
return schoolService.save(school);
}
@ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
@ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
String handleMediaTypeNotAcceptable(
final HttpMediaTypeNotAcceptableException exception,
final HttpServletRequest request) {
return "acceptable MIME type:" + MediaType.APPLICATION_JSON_VALUE;
}
}
我在我的Java8应用程序中使用。我无法接触到这个功能。对于所有异常,HTTP响应总是500(带有我插入到异常中的消息),并且忽略方法。 当我的同事用Java7编译器运行该应用程序时,它可以工作。 @ExceptionHandler注释不能在Java8中使用的原因是什么? 控制器: 我删除了注释,并尝试使用解析器,但它不起作用。 解析器的代码,在与rest控制器类相同的包中:
我使用以下代码设置了一个异常处理程序 我正在使用Spring Security 3.1。当我尝试在没有身份验证的情况下执行操作时,应用程序会引发 AccessDeniedException。它永远不会出现这种方法。但与其他例外情况一样工作正常。这是它应该工作的方式吗?还是我的代码有问题? 这看起来像一个解决方案。但是,如果我能在一个点上处理异常,那就更好了。 这是我的配置文件 更新 此处,用户未通
我有一个关于Spring Security级别上的异常的问题。 安全配置 如果我根据答案更改代码,即使SM_USEr标头存在且正确,也会出现此异常
我有一个方面类,用于记录使用泛型方法之前和之后(周围)的方法执行情况: 在方法中,我抛出了一个在logMethod中捕获的可抛出异常,并抛出了一个自定义异常,而不是类型 在我的控制器建议中,我有以下内容: 项目结构: 控制台:
我用Spring Boot和百里香SpringMVC。我有返回百里香模板名称的普通控制器和用< code>@RepsonseBody注释的REST控制器。 假设我有一个< code > EntityNotFoundException ,它是由控制器调用的某个代码抛出的。如果抛出,我想分别为REST控制器返回一个404状态代码和一个错误页面或错误消息。 我当前对普通控制器的设置: 对于REST控制程
我想在Spring中正确地处理我的异常,所以我有一个关于exceptionHandler语法的问题:如果异常处理程序捕获了特定的异常,那么在控制器中抛出特定的异常可以吗?