在一个案例中返回@ResponseBody,在另一个案例中返回ModelAndView

时间:2012-11-27 15:39:54

标签: java http spring-mvc web-applications

我有弹簧控制器方法。它旨在以编程方式注册用户(通过产品内其他系统的单一登录流程)。它的工作原理是获取用户数据,验证它,创建用户帐户(如果不存在),将共享令牌传送回另一个系统,然后验证用户。正在进行握手过程,但要解决问题的根源。如果用户不在系统中,我希望使用相同的方法返回字符串,如果已经注册,则返回ModelAndView

可能的解决方案(但不能执行):

  • 将使用HttpURLConnection输入流读取返回的字符串(在第一次用户的情况下)。因此,如果有一种方法将数据放入ModelAndView对象,然后使用输入流读取它,那么我就设置了。
  • 我可以通过将返回类型设置为@ResponseBody String来返回字符串并使用输入流将其读取,但是,当它是现有用户时,我无法返回视图。

理想情况下,我会返回一个模型和视图,但另一个系统不是spring,所以它不会理解它。

总而言之,一种做两件事的方法,如果用户是第一次用户,它将字符串返回给具有加密令牌的另一个系统,另一个系统将在iframe中使用该字符串来验证用户。

需要在一个案例中返回一个字符串,以便在另一个系统中使用输入流读取器读取,并且在现有用户的情况下,需要返回一个视图以使用spring本身读取。

如果有任何不清楚的地方,请告诉我。

编辑:有没有办法返回一个足够通用的http响应(类似于http servlet响应),可以在spring内外工作。这也将解决我的问题。

1 个答案:

答案 0 :(得分:4)

一个方法只能有一个返回类型,因此您需要将请求转发给另一个控制器方法。哪种控制器方法可以取决于您的身份验证结果...

    @RequestMapping ...
    public String handleRequest() {
        if(valid){
           return "forward:/path_to_my_another_controller";
        }else {
           return "forward:/somewhere_else";
        }
    }