创建具有自定义 MIME 类型的实体作为 spring 数据休息控制器的补充

Create entities with custom mime type as addition to spring data rest controller

我有 @Entity 呼叫 Scenario。我有一个 @Repository 和 spring 数据剩余,它为 CRUD 操作生成 MVC 控制器。路径是 /api/scenarios。有效。

我希望能够 POST/api/scenarios 端点,不仅可以使用默认的 JSON,还可以使用 multipart/form-data,这样我就可以创建我的 Scenario 来自用户上传的文件。我尝试创建自定义 @Controller:

@RestController
public class ImportController {

    @ResponseStatus(HttpStatus.CREATED)
    @RequestMapping(value = "/api/scenarios", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<Void> uploadScenario(@RequestPart(name = "scenario") MultipartFile scenarioFile) {
        ...
    }
}

有了这个,multipart/form-data 的上传就可以了,但我无法再使用 GET 访问 enpoint。我收到 不允许的方法。就像我的自定义控制器隐藏了由 spring 数据 rest.

生成的控制器一样

有没有办法在现有控制器上添加这样的自定义 POST,这样我就可以用 JSON 和 application/form-data mime 创建我的 Scenarios类型?

您需要将此自定义控制器指定为 存储库控制器 ,然后 Spring 会将您的自定义方法添加到生成的控制器中。

请注意,您不需要将 api 基本路径添加到您的控制器映射。 所以,您在这里的映射是 "/scenarios",而不是"/api/scenarios"

    @RepositoryRestController
    @RequestMapping("/scenarios")
    public class ImportController {

    @ResponseStatus(HttpStatus.CREATED)
    @RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<Void> uploadScenario(@RequestPart(name = "scenario") MultipartFile scenarioFile) {
        ...
    }
}