Java spring远程身份验证时如何处理停机场景?
我有一个基于SpringMVC的网站,在那里对用户进行身份验证,我需要调用第三方API(它与所有应用程序的核心用户数据库通信),并在那里对用户进行身份验证。 我能够成功地做到这一点,只是当第三方API由于某种原因关闭时,我的网站也会在任何访问者试图登录或注册时爆炸 我这样调用远程API:Java spring远程身份验证时如何处理停机场景?,java,spring,spring-mvc,authentication,Java,Spring,Spring Mvc,Authentication,我有一个基于SpringMVC的网站,在那里对用户进行身份验证,我需要调用第三方API(它与所有应用程序的核心用户数据库通信),并在那里对用户进行身份验证。 我能够成功地做到这一点,只是当第三方API由于某种原因关闭时,我的网站也会在任何访问者试图登录或注册时爆炸 我这样调用远程API: ResponseEntity ResponseEntity=restemplate.exchange(uri、HttpMethod.POST、request、LoginApiResponse.class) 在这
ResponseEntity ResponseEntity=restemplate.exchange(uri、HttpMethod.POST、request、LoginApiResponse.class)代码>
在这里,LoginApiResponse.class是一个bean,它包含UserDetails和来自那里的响应可能包含的其他信息
该Bean大致如下所示:
public class LoginApiResponse {
private HttpStatus status;
private String message;
private String responseStatus;
private UserModel userModel;
... ...
}
我有一个CustomResponseErrorHandler来处理我网站上的错误。
但是,当第三方站点关闭时,维护页面被配置为在任何类型的请求中返回,因此我得到的响应类型将为text/html
,响应状态为200 OK
。因此,这里没有遇到异常,我的CustomResponseErrorHandler
也不起作用。相反,当代码无法根据调用将text/html
类型响应转换为LoginApiResponse
时,代码会爆炸。它抛出
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.habba.web.rest.registration.LoginApiResponse] and content type [text/html]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:811)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:795)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:574)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:547)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:468)
我如何避免这种情况发生,并提前确定第三方API的不可用性?根据您所说的,您从API收到的正常响应的内容类型似乎是application/json
。您可以使用ResponseEntity
而不是ResponseEntity
并使用ResponseEntity.getHeaders().getContentType()
检查内容类型。如果内容类型不是您所期望的,您可以采取适当的措施。给定的方法也不适用于我。给我同样的错误,没有找到合适的HttpMessageConverter。尝试使用字符串类型,这样工作,但这不是我想要的。