Обратите внимание: хотя в этом вопросе конкретно упоминается Dropwizard, я полагаю, что любой, кто имеет опыт работы с Jersey/JAX-RS, должен быть в состоянии ответить на этот вопрос, поскольку я полагаю, что Dropwizard просто следует Соглашения Джерси/JAX-RS под капотом.
У меня есть служба Dropwizard, которая записывает/красит в JSON и прекрасно работает.
Теперь я хотел бы переключить его на чтение/запись двоичных данных (чтобы минимизировать пропускную способность сети). Я вижу, что есть Dropwizard-Protobuf lib, но у меня есть несколько опасений по поводу реализации двоичной сериализации в Dropwizard. .
Во-первых, вот важные вещи из моего текущего (ориентированного на JSON) кода:
// Groovy pseudo-code
// Domain entity/POJO
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
class Fizz {
@JsonProperty
String name
@JsonProperty
boolean isBuzz
}
// The Dropwizard app entry point
class FizzService extends Application<FizzConfiguration> {
@Override
void run(FizzConfiguration fizzCfg, Environment env) throws Exception {
// ... lots of stuff
env.jersey().register(new FizzService())
}
}
// JAX-RS resource with a sample GET endpoint
@Path(value = "/fizz")
@Produces(MediaType.APPLICATION_JSON)
class FizzResource {
@GET
@Path("/{id}")
Fizz getFizzById(@PathParam("id") int id) {
// Look up a 'Fizz' in a DB and return it.
lookupFizzinDB(id)
}
}
Как видите, конечная точка GET /fizz
ожидает объект запроса JSON, который содержит элемент с именем id
типа int
. Он возвращает объект ответа Fizz
, который соответствует предоставленному id
.
Я хочу переключить это с JSON на двоичный с помощью буферов протокола Google.
Согласно документам Dropwizard-Protobuf, это так же просто, как добавить это к моему методу FizzService#run(...)
:
environment.jersey().register(new ProtocolBufferMessageBodyProvider())
Проблема в том, что в настоящее время все мое приложение подключено к сериализации/десериализации в/из JSON. Аннотации @JsonProperty
в моем классе Fizz
имеют значение для Dropwizard. Аннотация @Produces(MediaType.APPLICATION_JSON)
на FizzResource
также играет важную роль. Я беспокоюсь, что заставить мое приложение Dropwizard читать/записывать двоичный файл, сгенерированный protobuf, не так просто, как 1-строчный текст, опубликованный в документации.
Я не женат на этой библиотеке. Если у кого-то есть опыт настройки конечных точек REST в приложении Dropwizard для приема/получения бинарного файла, сгенерированного protobuf, все, что мне нужно, — это работающее и эффективное решение. Идеи?