В настоящее время я использую Jersey и Moxy в Glassfish 4. Есть ли способ сообщить Jersey/Moxy об отказе от HTTP-запроса, если его содержимое JSON недействительно (т.е. содержит больше объектов, чем должно при привязке JSON к POJO)?
Как сделать Джерси/Мокси более строгим при демаршалинге JSON?
Ответы (1)
Я бы создал свой собственный подкласс MOXyJsonProvider
(см.: http://blog.bdoughan.com/2012/05/moxy-as-your-jax-rs-json-provider.html). Затем в этом подклассе я бы переопределил метод preReadFrom
. В этом методе я бы установил Unmarshaller.Listener
.
@Override
protected void preReadFrom(Class<Object> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders,
Unmarshaller unmarshaller) throws JAXBException {
Unmarshaller.Listener ul = new YourUnmarshallerListener();
unmarshaller.setListener(ul);
}
Затем Unmarshaller.Listener
будет подсчитывать каждый раз, когда объект не упорядочен, и выдавать ошибку, если будет прочитано слишком много объектов.
person
bdoughan
schedule
10.06.2014
Отличная идея! Благодарю вас! Я предполагаю, что этот код автоматически внедряется в Glassfish благодаря аннотации
@Provider
, верно?
- person mrik974; 13.06.2014