我有一个 Spring Controller 方法。它旨在以编程方式注册用户(通过产品内另一个系统的单点登录过程)。它的工作原理是获取用户数据,对其进行验证,如果不存在则创建用户帐户,将共享 token 传回其他系统,然后对用户进行身份验证。正在进行握手过程,但要找到问题的根源。如果系统中不存在用户,我希望使用相同的方法返回字符串,如果用户已经注册,则返回 ModelAndView
。
可能的解决方案(但无法执行):
- 将使用
HttpURLConnection
输入流读取返回的字符串(对于第一次使用的用户)。因此,如果有一种方法可以将数据放入 ModelAndView 对象中,然后使用输入流读取它,那么我就准备好了。 - 我可以通过将返回类型设置为
@ResponseBody String
来返回字符串并使用输入流读取它,但是,当它是现有用户时我无法返回 View 。
理想情况下,我会返回一个模型和 View ,但另一个系统不是 spring,所以它不会理解它。
总而言之,一种方法做两件事,如果用户是第一次使用,它会向另一个系统返回一个带有加密 token 的字符串,另一个系统将在 iframe 中使用该字符串对用户进行身份验证。
在一种情况下需要返回一个字符串,以便在另一个系统中使用输入流读取器读取,而在现有用户的情况下,需要返回一个 View 以使用 spring 本身读取。
如果有任何不清楚的地方,请告诉我。
编辑: 是否有一种方法可以返回一个足够通用且在 spring 内外都有效的 http 响应(类似于 http servlet 响应)。这也将解决我的问题。
最佳答案
一个方法只能有一个返回类型,因此您需要将请求转发给另一个 Controller 方法。哪种 Controller 方法可以取决于您的身份验证结果...
@RequestMapping ...
public String handleRequest() {
if(valid){
return "forward:/path_to_my_another_controller";
}else {
return "forward:/somewhere_else";
}
}
关于java - 在一种情况下返回 @ResponseBody,在另一种情况下返回 ModelAndView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587727/