Ваша проблема заключается не в аннотации @Before, а в ошибочной установке атрибута в HttpServletRequest вместо заголовка. Атрибут! = Заголовок. Поэтому, конечно, этот параметр будет нулевым в вашем контроллере.
Заголовки в HttpServletRequest доступны только для чтения. Вам нужно будет обернуть запрос в HttpServletRequestWrapper и выполнить все виды работ для управления исходными и вашими собственными заголовками. Существует множество примеров, в том числе полный: https://wilddiary.com/adding-custom-headers-java-httpservletrequest/
В нем представлен MutableHttpServletRequest, расширяющий HttpServletRequestWrapper. Вы будете сохранять состояние ваших пользовательских заголовков и просто их с оригинальными. Вам придется переопределить getHeader и getHeaderNames!
Ваш код @Before будет выглядеть примерно так:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
MutableHttpServletRequest wrappedRequest = new MutableHttpServletRequest(request);
request.putHeader("traceId", ServiceUtil.getTraceId());
return request;
Однако, чтобы получить немного функциональности (если вам не нужно делать это снова и снова). Для разового использования я бы просто использовал технику @Around.
Вся эта церемония добавит ценность карте!
Просто еще один - я всегда сохранял udl файл на своем рабочем столе для легкого создания и строки тестового соединения. Если Вы никогда не делали этого, прежде чем - создадут новый текстовый файл и назовут его к connection.udl (расширение является единственной важной частью). Откройте файл, запуститесь на вкладке Provider и проложите себе путь. После того как Вы довольны соединением, переименовывают файл, дающий его .txt расширение. Откройте файл и скопируйте строку - это относительно легко и позволяет Вам протестировать соединение перед использованием его.
Большим ресурсом, который я всегда имею в наличии, является connectionstrings.com. Действительно удобно для нахождения этих строк подключения, когда Вы не можете найти пример.
Особенно эта страница относилась к Вашей проблеме
Присоедините файл базы данных на подключении к локальному экземпляру SQL Server Express
Driver={SQL Native Client};Server=.\SQLExpress;AttachDbFilename=c:\asd\qwe\mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;
Таким образом, вот ответ из MSDN:
Choos[e] "Добавляет Новый Источник данных" из Меню данных. [И следуйте за мастером соединения]
Очень легкий, за исключением того, что у меня нет Меню данных. Если у Вас нет Меню данных, сделайте следующее:
Протестируйте соединение. Это будет хорошо. Если Вы хотите добавить строку к web.config, нажать кнопку Advanced, и скопировать строку Источника данных (у основания диалогового окна) и вставить его в строку подключения в соответствующем месте в web.config файле. Необходимо будет добавить"AttachDbFilename
"атрибут и значение. Пример:
Необработанный текст от панели Advanced:
Data Source=.\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True
Фактическая запись в web.config:
<add name="SomeDataBase" connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=C:\Development\blahBlah\App_Data\SomeDataFile.mdf;
Integrated Security=True; Connect Timeout=30; User Instance=True" />
<add name="Your Database" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Expanse.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/>