繁体   English   中英

Spring 数据 REST 自定义 POST 实体

[英]Spring Data REST customize POST entity

我正在使用 Spring 数据 Rest 3.3.1。

我有域 object(这只是一个例子):

@Data @Getter @Setter
@Entity
public class Figure {
  @Id private long id;
  private int volume;
}

我有这个实体的存储库:

@RepositoryRestResource
public interface FigureRepository extends CrudRepository<Figure, Long> {}

因此,spring 自动创建 POSTing Figure 实体的方法。 例如:

POST localhost:8080/figures
{
  "volume": 1000
}

但我想将自定义的 object 传递给 POST 方法并将其转换为所需的实体,例如

POST localhost:8080/figures
{
  "length": 10,
  "width": 10,
  "height": 10
}

和转换器的例子:

class FigureDtoConverter implements Converter<FigureDto, Figure> {
  @Override
  Figure convert(FigureDto dto) {
    Figure f = new Figure();
    f.setVolume(dto.getLength() * dto.getWidth() * dto.getHeight());
    return f;
  }
}

如何在不创建自定义 controller 的情况下做到这一点? 因为如果我创建 controller 我失去了有用的 spring 功能,如事件处理、验证等

没门。 您必须创建 controller。

使用不同的请求映射路径而不是/figures可以保留 Spring 数据 REST 端点

POST localhost:8080/figures
{
  "volume": 1000
}
POST localhost:8080/create-figure-by-measurement
{
  "length": 10,
  "width": 10,
  "height": 10
}

创建一个包含要传递的字段的 POJO。

public class Edges {
    Integer length;
    Integer width;
    Integer height; //getters and setters

}

你可以用这个发出post请求

{
  "length": 10,
  "width": 10,
  "height": 10
}

并获取 controller 中Edges的 object 并将其转换为Figure

@PostMapping("/figure")
public String getEdges(@RequestBody Edges edges){
    //...
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM