Я тоже столкнулся с этой проблемой и смог решить ее, основываясь на ответе Натана Бубны .
Я просто пытаюсь завершить ответ, предоставив ссылку на документацию Velocity , в которой объясняется, как использовать EventHandlers.
В моем случае мне нужно было, чтобы Velocity вызывал getAsString вместо метода toString для всех объектов JsonPrimitive из библиотеки gson каждый раз, когда вставлялась ссылка.
Это было так же просто, как создать
public class JsonPrimitiveReferenceInsertionEventHandler implements ReferenceInsertionEventHandler{
/* (non-Javadoc)
* @see org.apache.velocity.app.event.ReferenceInsertionEventHandler#referenceInsert(java.lang.String, java.lang.Object)
*/
@Override
public Object referenceInsert(String reference, Object value) {
if (value != null && value instanceof JsonPrimitive){
return ((JsonPrimitive)value).getAsString();
}
return value;
}
}
И добавить событие в VelocityContext
vec = new EventCartridge();
vec.addEventHandler(new JsonPrimitiveReferenceInsertionEventHandler());
...
context.attachEventCartridge(vec);