更改 Json return Spring OAuth2 的格式
Changing Json return format of 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());
}
};
}
在合并我们的 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());
}
};
}