2014-12-19 41 views
0

在我目前的春季项目中,我添加了几对类(控制器/服务),通过多种支付服务提供支付选项。这个类中的每一个有一个这样的结构:如何从服务类重定向到外部网址?

控制器

@Controller 
@RequestMapping(value = "pagseguro") 
public class pagseguroPaymentController extends paymentController<Pagseguro> { 
    ... 
    @Override 
    @RequestMapping(value = "comprar", method = RequestMethod.POST) 
    public void comprar(String payerId, String guid) throws Exception { 
     this.payment.comprar(payerId, guid); 
    } 
    ... 
} 

服务

@Service 
public class pagseguroPaymentService extends paymentService<Pagseguro> { 
    ... 
    @Override 
    public void comprar(String payerId, String guid) throws Exception { 
    ... 
    String response = checkout.register(null, false); 
    } 
    ... 
} 
在从服务类中的方法 comprar

,我需要重定向应用到一个存储在String变量中的URL(上例中为response)。

我最初的想法是从Java使用图书馆java.net并创建一个utilitary类这样的:

public class Redirect { 
    public static String url; 

    public static void redirect() { 
     ... 
    } 
} 

任何人都可以给我一个关于如何实现这一目标的暗示?

+2

任何重定向都应在'@ Controller'中完成,而不是在服务中。你应该发送一个来自服务的通知,也许该URL重定向到“@ Controller”并在那里执行重定向。 –

回答

0

要执行一个简单的重定向,你可以在你的控制器层注入HttpServletResponse

@RequestMapping(value = "comprar", method = RequestMethod.POST) 
public void comprar(String payerId, String guid, HttpServletResponse response) throws Exception { 
    this.payment.comprar(payerId, guid); 
} 

,然后简单地做使用该对象重定向:

response.sendRedirect("http://newUrl"); 

现在 - 作为Luiggi提到在注释中 - 我不会在服务层做重定向本身,而是返回一个布尔值,它决定是否需要重定向 - 然后在控制器层执行此操作。

希望它有帮助。

相关问题