我将支付网关与Spring Boot集成 - Thymeleaf
我有支付网关提供的示例应用程序,它基于JSP,如下所示
response.jsp
<%@ page language="java" session="true" %>
<%
String tranid=request.getParameter("tranid");
String result=request.getParameter("result");
out.println("REDIRECT=https://www.example.com/jsp/result.jsp?tranid="+tranid);
%>
支付网关将呼叫(处理付款后)重定向到response.jsp。在response.jsp内部,他们将重定向到另一个页面以显示结果。
Spring Boot中的相同内容
控制器类(用于提供重定向)
@RequestMapping(value= "/response")
public String responseHandlerSuccess(ServletRequest request, Model model) {
return "redirect:https://www.example.com/success?tranid="+tranid;
}
@RequestMapping(value = "/success", method = RequestMethod.GET)
public String showProduct(@RequestParam Map<String,String> response, ModelMap response){
System.out.println("Success Received ...");
return "success" // Success Template
}
我能看到消息“
成功收到......
“但页面没有重定向到成功模板。因此支付网关会抛出错误页面。如何使其工作?
答案 0 :(得分:0)
您需要配置Spring可以解决的文件。您可以使用不同类型的Resolver:ViewBased Resolver来解析模板,使用UrlBased Resolver解析模板和重定向等。 要设置解析器,您需要在via XML或某些配置类中实现。
以下是解析器的示例:
@Configuration
@EnableMvc
@ComponentScan("The package you want spring to scan")
public class WebConfig extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver viewResolver(){
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("Your View Directory, in my case it was '/WEB-INF/Views/'");
resolver.setSuffix("Your Views'extention, .jsp for example");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
要完成配置,我使用了一个扩展AbstractAnnotationConfigDispatcherServletInitializer的类。您需要覆盖3种方法:
protected Class<?>[] getRootConfigClasses();
protected Class<?>[] getServletConfigClasses();
protected String[] getServletMappings();
第二个是您实际使用View解析器的地方。在我的情况下,我只是覆盖它:
@Override
protected Class<?>[] getServletConfigClasses(){
return new Class<?>[]{WebConfig.class};
}
如果您遵循此指示,它通常会起作用,如果您需要更多解释,请不要犹豫。
答案 1 :(得分:0)
您正在使用 Spring Boot ,因此无需执行此类xml配置。
将给定行添加到application.properties文件
#Page settings
spring.mvc.view.prefix= /view/html/
spring.mvc.view.suffix= .jsp