VelocityEngineUtils has been removed in Spring 3.2 so what else to use?

后端 未结 4 1166
抹茶落季
抹茶落季 2020-12-14 19:11

Today I have upgraded my entire Spring web application from using Spring 3.1.1 to Spring 3.2.

Most part of my existing app does not break

4条回答
  •  春和景丽
    2020-12-14 20:12

    I wanted to add a complete answer.

    First, you add the dependency:

    
        org.apache.velocity
        velocity
        1.6.4
    
    

    Then, if you had a custom VelocityEngineFactory like this;

    @Bean
    public VelocityEngineFactory velocityEngine(){
        VelocityEngineFactoryBean bean = new VelocityEngineFactoryBean();
        Properties properties = new Properties();
        properties.setProperty("input.encoding", "UTF-8");
        properties.setProperty("output.encoding", "UTF-8");
        properties.setProperty("resource.loader", "class");
        properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        bean.setVelocityProperties(properties);
        return bean;
    }
    

    you need to replace it with a bean definition, something like below (in your @Configuration class); The below definition lets you to load templates from classpath.

    @Bean
    public VelocityEngine velocityEngine() throws Exception {
        Properties properties = new Properties();
        properties.setProperty("input.encoding", "UTF-8");
        properties.setProperty("output.encoding", "UTF-8");
        properties.setProperty("resource.loader", "class");
        properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        VelocityEngine velocityEngine = new VelocityEngine(properties);
        return velocityEngine;
    }
    

    Last, use it as: (here registration.vm is found on classpath)

    @Autowired
    private VelocityEngine velocityEngine;
    
    public String prepareRegistrationEmailText(User user) {
        VelocityContext context = new VelocityContext();
        context.put("username", user.getUsername());
        context.put("email", user.getEmail());
        StringWriter stringWriter = new StringWriter();
        velocityEngine.mergeTemplate("registration.vm", "UTF-8", context, stringWriter);
        String text = stringWriter.toString();
        return text;
    }
    

    Good luck.

提交回复
热议问题