Java @例外处理程序在弹簧座中不工作

Java @例外处理程序在弹簧座中不工作,java,spring,spring-mvc,spring-restcontroller,Java,Spring,Spring Mvc,Spring Restcontroller,我是SpringREST的初学者,在SpringREST中实现了异常处理。以下是引发自定义异常的控制器代码 @RequestMapping(value = "/getAllCountries", method = RequestMethod.GET, headers = "Accept=application/json") public Country getCountries() throws CountryNotFoundException{ throw new CountryNo

我是SpringREST的初学者,在SpringREST中实现了异常处理。以下是引发自定义异常的控制器代码

@RequestMapping(value = "/getAllCountries", method = RequestMethod.GET, headers = "Accept=application/json")
public Country getCountries() throws CountryNotFoundException{

    throw new CountryNotFoundException();

    //List<Country> listOfCountries = countryService.getAllCountries();
    // return listOfCountries;
}

@ExceptionHandler(CountryNotFoundException.class)
public ResponseEntity<ErrorMessage> handleException(HttpServletRequest req, Exception e)
{
    ErrorMessage error = new ErrorMessage("Custom handler message "+e.toString(), req.getRequestURI());
    return new ResponseEntity<ErrorMessage>(error,HttpStatus.NOT_FOUND);

}
有人能告诉我是否有任何其他的配置需要处理程序来执行吗

编辑:当我将ResponseEntity的参数更改为String时,它会工作,但不会与ErrorMessage一起工作。为什么会发生这种行为?

请遵循我的异常处理。我已经创建了一个示例项目,用于更详细的参考,可以找到

请遵循我的异常处理。我已经创建了一个示例项目,用于更详细的参考,可以找到它,试试这个

import com.fasterxml.jackson.annotation.JsonProperty;

public class ErrorMessage {

    @JsonProperty
    private final String message;

    @JsonProperty
    private final String requestURI;

    public ErrorMessage(String message, String requestURI) {
        this.message = message;
        this.requestURI = requestURI;
    }
}
试试这个

import com.fasterxml.jackson.annotation.JsonProperty;

public class ErrorMessage {

    @JsonProperty
    private final String message;

    @JsonProperty
    private final String requestURI;

    public ErrorMessage(String message, String requestURI) {
        this.message = message;
        this.requestURI = requestURI;
    }
}

尝试将返回类型更改为字符串。我猜
CountryNotFoundException
不是
RuntimeException
您是否可以尝试执行以下操作,例如检查是否使用两个不同的输入参数抛出了您的例外?例如:
ResponseEntity handleCountryNotFound(CountryNotFoundException e){return ResponseEntity.status(404).entity(“未找到”).build()}
然后查看它是否被调用/捕获?您是否定义了
CountryNotFoundException
来扩展
异常
?@DforTye否它扩展了RuntimeException..尝试将返回类型更改为String。我猜
CountryNotFoundException
不是
RuntimeException
您是否也可以尝试这样做下面检查是否正在使用两个不同的输入参数抛出您的示例?例如:
ResponseEntity handleCountryNotFound(CountryNotFoundException e){return ResponseEntity.status(404).entity(“未找到”).build()}
然后查看它是否被调用/捕获?您是否定义了
CountryNotFoundException
来扩展
异常
?@DforTye否它扩展了RuntimeException..谢谢您的回答。当我将ResponseEntity的参数改为string而不是自定义错误类时,它会正常运行。但对于自定义错误消息参数,它不会。你能告诉我为什么吗?谢谢你的回答。当我将ResponseEntity的参数改为string而不是自定义错误类时,它会正常运行。但对于自定义错误消息参数,它不会。你能告诉我为什么吗?这太棒了。在我遇到的所有示例中,我都没有看到处理程序的此类注释。这个版本是特定于spring的吗?不,它不是特定于版本的。Spring尝试使用
HttpMessageConverter
ResponseEntity
转换为response。为了告诉Jackson,
ErrorMessage
可以序列化为json,我们使用了
@JsonProperty
。这太棒了。在我遇到的所有示例中,我都没有看到处理程序的此类注释。这个版本是特定于spring的吗?不,它不是特定于版本的。Spring尝试使用
HttpMessageConverter
ResponseEntity
转换为response。为了告诉Jackson可以将
ErrorMessage
序列化为json,我们使用
@JsonProperty