gpt4 book ai didi

java - 在 Spring 3 中是否可以动态设置 @ResponseStatus 的原因?

转载 作者:IT老高 更新时间:2023-10-28 13:47:31 27 4
gpt4 key购买 nike

我有一个自定义异常类被注释为返回一个给定的 HttpStatus:

@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="Invalid parameter")
public class BadRequestException extends RuntimeException
{
public BadRequestException(String msg)
{
super(msg);
}
}

当我从 Controller 抛出 BadRequestException 时,这有效,但原因当然总是“无效参数”。有没有办法在这个类中设置返回的原因?我想传递一个字符串作为原因。

谢谢!

最佳答案

如果您在自定义异常的@ResponseStatus 注释中省略了“原因”属性,

@ResponseStatus(value = HttpStatus.CONFLICT)  // 409
public class ChildDataExists extends RuntimeException {
...

然后抛出异常 - 在您的 service 层中。因此,您不需要 catch 并在 Controller 中抛出其他内容或 catch 来将响应直接设置为某些 HTTP 状态代码。

throw new ChildDataExists("Can't delete parent if child row exists.");

异常消息作为 JSON 输出中“数据”的“消息”传递。注释中的“原因”似乎覆盖了自定义行为。因此,您可以针对给定上下文说一个基本异常,并在十几个地方使用它,每个地方都有一个稍微不同的消息,抛出它并且所有获取都正确处理到 REST 接口(interface)。

关于java - 在 Spring 3 中是否可以动态设置 @ResponseStatus 的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com