После добавления пользовательского сериализатора Jackson
на основе официальная документация Я наблюдал немного другой формат вывода json.
Этот пример основан на spring-restbucks.
Расширение org.springsource.restbucks.WebConfiguration
из RepositoryRestMvcConfiguration
и переопределение configureJacksonObjectMapper
:
@Override
protected void configureJacksonObjectMapper(ObjectMapper objectMapper) {
final SimpleSerializers serializers = new SimpleSerializers();
serializers.addSerializer(Order.class, new OrderSerializer());
objectMapper.registerModule(new SimpleModule("CustomSerializerModule"){
@Override public void setupModule(SetupContext context) {
context.addSerializers(serializers);
}
});
}
Создайте класс org.springsource.restbucks.order.OrderSerializer
. Для краткости просто напишите атрибут paid
как JSON.
public class OrderSerializer extends JsonSerializer<Order> {
@Override
public void serialize(Order value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeStartObject();
jgen.writeBooleanField("paid", value.isPaid());
jgen.writeEndObject();
}
}
Перед добавлением ответа OrderSerializer json для http://localhost:8080/orders/1
выглядит так:
{
"location": "TAKE_AWAY",
"status": "PAYMENT_EXPECTED",
"orderedDate": "2014-03-24T15:05:09.988+01:00",
"items": [
{
"name": "Java Chip",
"quantity": 1,
"milk": "SEMI",
"size": "LARGE",
"price": {
"currency": "EUR",
"value": 4.2
}
}
],
"_links": {
...
}
}
После добавления ответа OrderSerializer json для http://localhost:8080/orders/1
выглядит так
{
"content": {
"paid": false
},
"_links": {
...
}
}
Основной вывод заключается в том, что атрибут платный заключен в содержимое другого объекта, которое является атрибутом org.springframework.hateoas.Resource. Я ожидал ответа без этого атрибута:
{
"paid": false,
"_links": {
...
}
}
Я изучил код Джексона и обнаружил, что UnwrappingBeanSerializer может быть решением, которое я ищу. Посмотрев, как инициализировать UnwrappingBeanSerializer, я думаю, что этот сериализатор не предназначен для подкласса для пользовательского использования.
Я хотел бы знать, является ли этот отклоняющийся формат json при использовании пользовательского сериализатора нормальным поведением или ошибкой в Spring Data Rest. Любая помощь приветствуется.