相关疑难解决方法(0)

在Spring Data Rest中使用自定义json序列化程序时输出不同的JSON

Jackson根据官方文档添加自定义序列化程序后,我观察到了略微不同的json输出格式.

这个例子是基于弹簧垫的叉子.

扩展org.springsource.restbucks.WebConfigurationRepositoryRestMvcConfiguration并重写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);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

创建类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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在添加OrderSerializer json响应之前,http://localhost:8080/orders/1看起来像:

{
  "location": "TAKE_AWAY", …
Run Code Online (Sandbox Code Playgroud)

jackson spring-data-rest spring-hateoas

12
推荐指数
1
解决办法
5326
查看次数

spring-data-rest,你能提供实体的全部细节而不是(或)链接

有没有办法返回已加入实体的完整详细信息而不是链接?在下面的示例中,我还要返回产品的详细信息,如果我有100个购买列表,则可以避免拨打100个电话来获取产品详细信息.

Product,User和Purchase实体的存储库都是使用spring-data-jpa创建的

{
  "_embedded" : {
    "purchase" : [ {
      "_links" : {
        "product" : {
          "href" : "http://localhost:8080/webapp/purchase/1/product"
        },
        "user" : {
          "href" : "http://localhost:8080/webapp/purchase/1/user"
        }
      },
      "purchasedOn" : "2014-02-23",
      "amount" : 1
    } ]
  }
}
Run Code Online (Sandbox Code Playgroud)

实体和存储库;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = Purchase.class, orphanRemoval = true)
    @JoinColumn(name = "user_id", updatable = false)
    private List<Purchase> purchases = new ArrayList<>();

}

@Entity
public class Product …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-jpa spring-data-rest

8
推荐指数
1
解决办法
4774
查看次数

如何绑定Spring Data REST实体来传输对象?

我们有两个具有客户端 - 服务器架构的Spring Boot应用程序.后端配置了Spring Data REST + JPA.前端应该消耗后端公开的资源并提供公共REST API.

是否可以通过声明例如mapper bean使Spring数据自动从DTO映射到域对象?

// JPA persistable
@Entity
public class Order { .. }

// Immutable DTO
public class OrderDto { .. } 

// Is this somehow possible..
@RepositoryRestResource
public interface OrderDtoRepository extends CrudRepository<OrderDto, Long> {}

// .. instead of this?
@RepositoryRestResource
public interface OrderRepository extends CrudRepository<Order, Long> {}
Run Code Online (Sandbox Code Playgroud)

data-transfer-objects spring-data-jpa spring-data-rest

6
推荐指数
1
解决办法
5199
查看次数