java - 改变Spring OAuth2的Json返回格式

标签 java spring spring-boot spring-oauth2

在整合我们的 json 响应时,我尝试将 spring oauth2 json 响应更改为我们的格式。

来自

{
  "error": "invalid_token",
  "error_description": "Invalid access token: undefined"
}

{
  "status" : 401,
  "error_code": "invalid_token",
  "description": "Invalid access token: undefined"
}

我已经调试并发现了几个可能相关的点,但我无法将所有内容放在一起。

这些是我的方法

  • 响应写在这里OAuth2ExceptionJackson2Serializer,但我不知道如何在spring中交换那个序列化器
  • 我找到了 WebResponseExceptionTranslator。但据我了解,它不允许在那里设置 json 主体
  • json 主体由 DefaultOAuth2ExceptionRenderer 编写,但我无法设置它。我只找到了如何设置 ExceptionTranslator,方法是在 AuthorizationServerEndpointsConfigurer 中设置它。但是它不允许设置渲染器
  • 文档讨论了如何设置 HttpMessageConverter,我不知道该怎么做。

长话短说,我是 Spring 的新手,我真的很感激一些关于如何修改响应的指导。

谢谢, 奥托

最佳答案

找到解决方案,注册WebResponseExceptionTranslator:

    @Bean
public WebResponseExceptionTranslator webResponseExceptionTranslator() {
    return new DefaultWebResponseExceptionTranslator() {
        @Override
        public ResponseEntity<OAuth2Exception> translate(Exception e) throws Exception {
            ResponseEntity<OAuth2Exception> responseEntity = super.translate(e);
            OAuth2Exception body = responseEntity.getBody();
            HttpHeaders headers = new HttpHeaders();
            headers.setAll(responseEntity.getHeaders().toSingleValueMap());

           // translate the exception

            return new ResponseEntity<>(body, headers, responseEntity.getStatusCode());
        }
    };
}

关于java - 改变Spring OAuth2的Json返回格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39592839/

相关文章:

java - 使用maven指定特定的jar文件

java - 防止尝试下载视频服务器中的视频

java - Spring Batch事务异常:Existing transaction detected in JobRepository

java - 在 Spring Boot 应用程序中维护多个属性文件

java - GradlecompileTestJava 在 gradle clean 构建期间失败

java - 使用 XSLT 漂亮地打印 XML/XHTML,而不会损坏 namespace 信息

java - 我如何解释这个 JVM 错误?

spring - 使用 spring-java-config 设置 spring View 解析器

java - 为什么使用 ThreadPoolExecutor 的子线程不能暴露给父线程的任何继承上下文?

java - Spring 启动: stacktrace printed in console not in log file