簡體   English   中英

Spring數據休息覆蓋嵌套屬性POST處理程序

[英]Spring data rest override nested property POST handler

我有一個Spring Data Rest存儲庫

public interface ProjectRepository extends CrudRepository<Project, Integer> {}

對於以下實體:

@javax.persistence.Entity
@Table(name = "project", uniqueConstraints = {@UniqueConstraint(columnNames = {"owner_id", "title"})})
public class Project {

    @Id
    @Column(name = "project_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    ...

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "project_document", joinColumns = {
            @JoinColumn(name = "project_id", nullable = false, updatable = false) },
            inverseJoinColumns = { @JoinColumn(name = "document_id",
                    nullable = false, updatable = false) })
    private Set<Document> documents;

    ...
}

我想覆蓋嵌套documents集合的POST處理程序,並遵循建議的方法

@RepositoryRestController
public class DocumentController {


    @RequestMapping(value = "/projects/{projectId}/documents", method = RequestMethod.POST)
    public Document postDocument(
            final @PathVariable int projectId,
            final @RequestPart("file") MultipartFile documentFile,
            final @RequestPart("description") String description
    ) throws IOException {
        ...
    }
}

但是當我啟動嵌套的POST時,它仍然使用原始的Spring生成的POST處理程序並拋出不支持的媒體類型錯誤。

當我改變@RepositoryRestController@RestController ,正確的POST處理程序使用,但對於彈簧產生的CRUD方法documents的子資源project不會被導出。

嘗試這樣的事情:

@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);
    }
}

工作實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM