Я пробую что-то с помощью Akka HTTP, и я нашел это на официальном doc , а код сниппета выглядит так
final RejectionHandler rejectionHandler = RejectionHandler.defaultHandler()
.mapRejectionResponse(response -> {
if (response.entity() instanceof HttpEntity.Strict) {
// since all Akka default rejection responses are Strict this will handle all rejections
String message = ((HttpEntity.Strict) response.entity()).getData().utf8String()
.replaceAll("\"", "\\\"");
// we create a new copy the response in order to keep all headers and status code,
// replacing the original entity with a custom message as hand rolled JSON you could the
// entity using your favourite marshalling library (e.g. spray json or anything else)
return response.withEntity(ContentTypes.APPLICATION_JSON,
"{\"rejection\": \"" + message + "\"}");
} else {
// pass through all other types of responses
return response;
}
});
Теперь я застрял там, где мне нужночтобы преобразовать JSON-тип во что-то «чище», а не в конкатенацию строк.
return response.withEntity(ContentTypes.APPLICATION_JSON,
"{\"rejection\": \"" + message + "\"}");
Я знаю, что могу использовать ObjectMapper (), но я ищу способ выполнения задач по умолчанию.Метод волшебного соуса, который бы взял Marshaller, класс и объект, чтобы сделать вещи.Есть идеи?
До сих пор я пробовал что-то вроде этого
String message = ((HttpEntity.Strict) response.entity()).getData().utf8String();
HttpEntity.Strict jsonMessage = HttpEntities.create(ContentTypes.APPLICATION_JSON, message);
HttpResponse httpResponse = HttpResponse.create()
.withStatus(response.status().intValue())
.withEntity(jsonMessage);
return httpResponse;
Но все же я получаю текстовый / простой ответ, хотя заголовки содержимого установлены в Content-Type → application /JSON.