exceptions are exceptions true - like 412/Precondition Failed.

In such a case a developer wants for sure add a response body to tell the client what went wrong.
And because clients can be non-human - they expect a certain format.

In case I'm implementing a json based api and I want to return a 412 because a precondition didn't match I'd code it that way:
(pseudo code)
````
var etag = getETag(.....);
if (request.headers.IfNonMatch != etag) {
    throw new HttpResponseException(412, '{ error: "object_updated"}');
}
````

alternative with JSONResponse:
````
var etag = getETag(.....);
if (request.headers.IfNonMatch != etag) {
    $data = array('error' => 'object_updated');
    throw new HttpResponseException(412, new JSONResponse($data));
}
````