Я работаю над устаревшим веб-приложением, созданным с использованием JSP. Меня попросили заменить double на BigDecimal в кодах. Мне известно, что метод BigDecimal, используемый по умолчанию для метода toString (), использует научные обозначения для визуализации чисел. Это будет проблемой при выводе числа на странице JSP. Я не хочу заменять каждый $ {obj.property} на . Поэтому мне интересно, есть ли способ переопределить метод toString (), поэтому он будет вызывать toPlainString () ? Я попробовал cglib, но понял, что это не для этой цели, так как он может манипулировать только BigDecimal, сгенерированным Enhancer, как показано ниже:
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(BigDecimal.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
if(method.getName().equals("toString")){
return ((BigDecimal) obj).toPlainString();
}else{
System.out.println(method.getName() + " called.");
return proxy.invokeSuper(obj, args);
}
}
});
BigDecimal bd = (BigDecimal) enhancer.create(new Class[]{String.class}, new Object[]{"123"});
System.out.println(bd.toString());
Я собираюсь взглянуть на Byte Buddy и Javassit, но думаю, они работают так же, как cglib.
Кто-нибудь знает способ достичь этого?
Для JSP я могу обойтись с настроенным javax.el.BeanELResolver, но все же есть ли способ переопределить стандартный метод библиотеки во всем приложении?