2016-10-13 4 views
1

Если клиент делает запрос на ресурс и задает заголовок If-Modified-Since, когда отображаемый объект не имеет каких-либо аннотаций аудита JPA Spring Data (@CreatedBy, @LastModifiedBy, @CreatedDate, @LastModifiedDate), то это, как представляется, приведет к исключению нулевого указателя в классе org.springframework.data.rest.webmvc.HttpHeadersPreparer:Spring Data Rest: Null Pointer If-Modified-Since Header Present и Resource Not Auditable

public boolean isObjectStillValid(Object source, HttpHeaders headers) { 

    Assert.notNull(source, "Source object must not be null!"); 
    Assert.notNull(headers, "HttpHeaders must not be null!"); 

    if (headers.getIfModifiedSince() == -1) { 
     return false; 
    } 

    //THE WRAPPER IS NULL IF NO AUDITING ANNOTATIONS PRESENT 
    AuditableBeanWrapper wrapper = auditableBeanWrapperFactory.getBeanWrapperFor(source); 
    long current = wrapper.getLastModifiedDate().getTimeInMillis()/1000 * 1000; 

    return current <= headers.getIfModifiedSince(); 
} 

Является ли это ошибка, и короткие добавления поле для Entity, чтобы предотвратить это, есть ли какой-либо другой workround.

ответ

0

Если выборка объекта не испускает заголовок Last-Modified, то я бы сказал, что это ошибка на клиенте, а не SDR.

Если ни одно из ваших объектов не поддерживает Last-Modified, возможно, создайте фильтр, который удаляет If-Modified-Since с запросом или улавливает его раньше и отвечает соответствующим образом.

Все это говорит о том, что я также не думаю, что NPE является приемлемым, и ошибка SDR должна быть подана.