Java Spring数据rest重写嵌套属性后处理程序

Java Spring数据rest重写嵌套属性后处理程序,java,spring,spring-boot,spring-data,spring-data-rest,Java,Spring,Spring Boot,Spring Data,Spring Data Rest,我有一个Spring数据Rest存储库 public interface ProjectRepository扩展了crudepository{} 对于以下实体: @javax.persistence.Entity @表(name=“project”,uniqueConstraints={@UniqueConstraint(columnNames={“owner\u id”,“title”}) 公共类项目{ @身份证 @列(name=“project\u id”) @GeneratedValue

我有一个Spring数据Rest存储库

public interface ProjectRepository扩展了crudepository{}
对于以下实体:

@javax.persistence.Entity
@表(name=“project”,uniqueConstraints={@UniqueConstraint(columnNames={“owner\u id”,“title”})
公共类项目{
@身份证
@列(name=“project\u id”)
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
...
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“project\u document”,JointColumns={
@JoinColumn(name=“project_id”,nullable=false,updateable=false)},
inverseJoinColumns={@JoinColumn(name=“document\u id”,
nullable=false,updateable=false)})
私人文件;
...
}
我想覆盖嵌套的
文档
集合的POST处理程序,并遵循

@RepositoryRestController
公共类文档控制器{
@RequestMapping(value=“/projects/{projectId}/documents”,method=RequestMethod.POST)
公开文件邮递文件(
最终@PathVariable int projectId,
最终@RequestPart(“文件”)多部分文件,
最终@RequestPart(“说明”)字符串说明
)抛出IOException{
...
}
}
但当我启动嵌套的POST时,它仍然使用原始的Spring生成的POST处理程序,并抛出不支持的媒体类型错误


当我将
@RepositoryRestController
更改为
@RestController
时,会使用正确的POST处理程序,但不会导出
项目
子资源的
文档
的Spring生成的CRUD方法。

尝试以下操作:

@RequiredArgsConstructor
@RepositoryRestController
@RequestMapping("/projects/{id}")
public class ProjectsController {

    private final @NonNull DocumentRepository documentRepository;

    @PostMapping("/documents")
    public ResponseEntity<?> postDocument(@PathVariable("id") Project project, @RequestBody Document document) {
        if (project == null) {
            throw new Exception("Project is not found!");
        }

        if (document == null) {
            throw new Exception("Document is not found");
        }

        Document savedDocument = documentRepository.save(document.setProject(project));
        return new ResponseEntity<>(new Resource<>(savedDocument), CREATED);
    }
}
@RequiredArgsConstructor
@RepositoryRestController
@请求映射(“/projects/{id}”)
公共类项目控制器{
私有最终@NonNull DocumentRepository文档存储库;
@后映射(“/文档”)
公共响应性postDocument(@PathVariable(“id”)项目,@RequestBody文档){
如果(项目==null){
抛出新异常(“未找到项目!”);
}
if(document==null){
抛出新异常(“未找到文档”);
}
Document savedDocument=documentRepository.save(Document.setProject(project));
返回新的响应属性(新资源(savedDocument),已创建);
}
}

正在工作。

尝试以下方法:

@RequiredArgsConstructor
@RepositoryRestController
@RequestMapping("/projects/{id}")
public class ProjectsController {

    private final @NonNull DocumentRepository documentRepository;

    @PostMapping("/documents")
    public ResponseEntity<?> postDocument(@PathVariable("id") Project project, @RequestBody Document document) {
        if (project == null) {
            throw new Exception("Project is not found!");
        }

        if (document == null) {
            throw new Exception("Document is not found");
        }

        Document savedDocument = documentRepository.save(document.setProject(project));
        return new ResponseEntity<>(new Resource<>(savedDocument), CREATED);
    }
}
@RequiredArgsConstructor
@RepositoryRestController
@请求映射(“/projects/{id}”)
公共类项目控制器{
私有最终@NonNull DocumentRepository文档存储库;
@后映射(“/文档”)
公共响应性postDocument(@PathVariable(“id”)项目,@RequestBody文档){
如果(项目==null){
抛出新异常(“未找到项目!”);
}
if(document==null){
抛出新异常(“未找到文档”);
}
Document savedDocument=documentRepository.save(Document.setProject(project));
返回新的响应属性(新资源(savedDocument),已创建);
}
}
工作