В настоящее время я пытаюсь изменить (с помощью фильтра Spring) некоторые переменные запроса, размещаемые в форме.
В связи с этим я хотел бы улучшить проверку телефонных номеров и лучше контролировать форматирование телефонных номеров.Для этой части головоломки я намереваюсь использовать номер телефона Google Lib в моей модели, например, так:
private PhoneNumber mobileNumber;
Один получатель, без упоминания префикса вообще, учитывая, что фильтр, надеюсь, будет делатьтяжелая работа для меня.
Первоначально я думал, что, возможно, я мог бы использовать для этого конвертер атрибутов, то есть
@Convert(converter = PhoneNumberConverter.class )
private PhoneNumber mobileNumber;
Однако, есть проблема с этим, в том случае, если полеявляется составным типом, JPA не поддерживает его: https://github.com/javaee/jpa-spec/issues/105 (compositie, поскольку необходим PREFIX, а также NUMBER) для создания объекта телефона lib.
Итак.Фильтр (или перехватчик?) - вот что у меня осталось.Мой вопрос заключается в том, что я новичок в среде Spring и не уверен на 100%, позволит ли простое изменение необработанного запроса создать экземпляр объекта PhoneNumber в модели (я полагаю, нет), но есть какие-либо указания о том, как Spring управляетбыло бы полезно сделать магическое связывание переменных запроса с объектом (путем сопоставления методов получения и установки), и как бы я делал это вручную в фильтре.Есть ли какой-нибудь способ доступа к этому объекту Model в фильтре, чтобы я мог установить его напрямую?
public class PhonePrefixFilter extends OncePerRequestFilter
{
@Override
protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain )
throws ServletException, IOException
{
String prefix = request.getParameter( "phonePrefix" );
if( StringUtils.isNotEmpty( prefix ) )
request.setAttribute( "mobileNumber", prefix + request.getAttribute( "mobileNumber" ) );
filterChain.doFilter( request, response );
}
}