java - 在一种情况下返回 @ResponseBody,在另一种情况下返回 ModelAndView

标签 java http spring-mvc web-applications

我有一个 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/

相关文章:

java - 为什么额外的数据被写入我的输出流以及如何阻止这种情况?

java - java中的更新语句

java - 我生成毕达哥拉斯三胞胎的代码出了什么问题?

c++ - C++中的HTTP代理示例

java - Spring 。将字符串值从 View 传递到模型中的 int/Integer 参数

java - 创建条件时 session 关闭

java - 如何在 Hadoop 中自定义 Writable 类?

python - 如何使用 Python 抓取需要先登录的网站

asp.net - 是否有规范/RESTful 方式在 GET 期间将查询详细信息发送到服务器?

java - Spring MVC Filter解决方案