gpt4 book ai didi

Spring Boot REST 服务未在 JSON 输出中显示 @ResponseStatus 异常原因

转载 作者:行者123 更新时间:2023-12-05 07:57:35 27 4
gpt4 key购买 nike

我创建了一个用 @ResponseStatus 注释的异常,允许抛出异常并从前端的 JSON 内容中接收原因。

@ResponseStatus(value = BAD_REQUEST,  reason='exception.user.exists')
class UserAlreadyExists extends RuntimeException{
}

当我尝试在服务正常运行时通过按键解析消息时,我得到了本地化的消息。

@Service
public class UserService implements UserDetailsService {

@Autowired
private MessageSource messageSource

private void verifyIsNewUser(User user) {
if (userRepository.countByEmail(user.email)) {
def reason = this.messageSource.getMessage("exception.user.exists", null, "just a message", LocaleContextHolder.getLocale());
println reason // User already registered
throw new UserAlreadyExists()
}
}

问题一

现在,如果我调试 ResponseStatusExceptionResolver我看到 MessageSource 是 null 这很奇怪。由于 ResponseStatusExceptionResolver 正在实现接口(interface) MessageSourceAware,因此它应该注入(inject)一个 messageSource。为什么不是呢?

问题2

如果我忽略我没有自定义消息这一事实并查看到达前端的 JSON 输出,我将面临以下结果:

{"timestamp":1414403066197,"status":400,"error":"Bad Request","exception":"io.test.UserAlreadyExists","message":null,"path":"/register/"}

我希望在 JSON 响应中看到没有关于原因 的文本字段。类似于 {...,"reason":"exception.user.exists","message":null, ....}

为什么 JSON 响应不包含原因(键)?查看 ResponseStatusExceptionResolver 的代码时如果没有检索到 key 消息,则只使用 key /消息。

最佳答案

答案 1:Spring IMO 中的一个错误。 ResponseStatusExceptionResolver 不是 @Bean,因此它不会被注入(inject) MessageSource

答案 2:Spring Boot 的功能请求。您看到的是 Boot 的默认/error 输出,它正在 Exception 中查找消息,而不是 HttpServletResponse“原因”代码(我假设可以通过应用程序接口(interface))。这是一个链接:https://github.com/spring-projects/spring-boot/issues/1762 .

关于Spring Boot REST 服务未在 JSON 输出中显示 @ResponseStatus 异常原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26585328/

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