2014-12-19 3 views
0

В моем текущем проекте весны я добавляю несколько пар классов (контроллер/сервис), чтобы предоставить возможность оплаты через несколько платежных сервисов. Каждый из этих классов имеет структуру вроде:Как перенаправить внешний URL из класса обслуживания?

контроллера

@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 от класса обслуживания, мне нужно перенаправить приложение к URL, сохраненный в переменной String (response в приведенном выше примере).

Моя первоначальная идея заключается в использовании библиотеки java.net из Java и создать 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"); 

Теперь - в упоминает Луиджи в комментарии - я бы не сделал перенаправление себя на уровне сервиса, а скорее вернул логическое значение, которое решает, нужно ли перенаправление выполнить, а затем сделайте это здесь, на уровне контроллера.

Надеюсь, это поможет.

Смежные вопросы