2015-11-06 3 views
0

У меня есть следующий код:Override HttpMessageConverter весна RequestBody

@RequestMapping(value="/mobile/device", method = RequestMethod.PUT) 
public ResponseEntity<Void> flagDevice (@RequestBody List<MobileDeviceData> devicedataList, @RequestHeader(value="special_code") String specialCode) { 
// Implementation details 
} 

Каждый экземпляр MobileDeviceData который создается, должен иметь поле парам залитой RequestHeader special_code.

Как бы я мог сделать это, чтобы он был полностью заполнен к тому времени, когда тело метода flagDevice вызвано?

Заранее спасибо.

ответ

0

Это нетривиально.

HttpMessageConverter уже предоставлен, что десериализует JSON, это MappingJackson2HttpMessageConverter. Он имеет доступ к заголовкам запроса. Вы можете расширить этот класс, чтобы также использовать заголовки для десериализации (это чрезвычайно сложно сделать в общем, а не только для MobileDeviceData).

Вы можете использовать Spring AOP, перехватить метод, retrieve the arguments, применить к соответствующим типам и присвоить значение самостоятельно.

Решение, которое я бы выбрал, является самым простым: сделайте это самостоятельно в методе обработчика. Закрепите List и используйте соответствующий установщик, чтобы установить specialCode для каждого MobileDeviceData.

Другой вариант - определить ваши собственные HandlerMethodArgumentResolver специально для параметров List<MobileDeviceData>, которые должны быть сконструированы из заголовков.

+0

Спасибо. Вероятно, в этом случае будет идти тривиальное решение. – DavidR

Смежные вопросы