Introduced a dedicated value object for ETags and moved the logic of ETagValidator into it. Switched from an annotation based injection model to a type based one. The HTTP status code for a non-matching ETag is now 412 Precondition failed as the HTTP specification suggests. Original pull request: #148.