Как сделать Джерси/Мокси более строгим при демаршалинге JSON?

В настоящее время я использую Jersey и Moxy в Glassfish 4. Есть ли способ сообщить Jersey/Moxy об отказе от HTTP-запроса, если его содержимое JSON недействительно (т.е. содержит больше объектов, чем должно при привязке JSON к POJO)?


person mrik974    schedule 06.06.2014    source источник


Ответы (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
comment
Отличная идея! Благодарю вас! Я предполагаю, что этот код автоматически внедряется в Glassfish благодаря аннотации @Provider, верно? - person mrik974; 13.06.2014