我对注释究竟是如何工作有点困惑所以我无法轻易找到答案,即使它没有解释就在我眼前。
让我们说例如我们有这个类
//this happens to be a Spring annotation in this case
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = " not found")
class NotFoundException extends RuntimeException {
public NotFoundException(String resourceName) {
//get access to reason from class's annotation
reason = resourceName + reason;
}
}
如何在运行时访问注释的参数reason
?这甚至可能吗?如果是这样,我知道有反思,但不完全确定正确的方法。
答案 0 :(得分:2)
immibis向您展示了从注释中检索属性的技术方法。
但我认为没有理由这样做。首先,作为ResponseStatus#reason
状态的javadoc
如果未设置此元素,则默认为标准状态 消息为状态代码。请注意,由于使用
HttpServletResponse.sendError(int, String)
,回复将是 被认为是完整的,不应再写入任何内容。
您可能希望将标准状态消息写入响应而不是您自己的消息。
如果您仍然想要自己的,我会定义一个常量表达式,并在需要reason
时引用它,而不是从注释中检索它。
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = NotFoundException.REASON)
class NotFoundException extends RuntimeException {
static final String REASON = " not found"; // you can define this in another class
public NotFoundException(String resourceName) {
String something = resourceName + REASON;
}
}
答案 1 :(得分:1)
您可以阅读注释reason
:
String reason = NotFoundException.class.getAnnotation(ResponseStatus.class).reason();
您无法更改注释中的值。