在Jackson根据官方文档添加自定义序列化程序后,我观察到了略微不同的json输出格式.
这个例子是基于弹簧垫的叉子.
扩展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);
}
});
}
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) 有没有办法返回已加入实体的完整详细信息而不是链接?在下面的示例中,我还要返回产品的详细信息,如果我有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) 我们有两个具有客户端 - 服务器架构的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)