首页 > 解决方案 > Spring - 两种不同的 POST 方法,具有相同的 URL,但生成的内容类型不同

问题描述

我有以下控制器:

@RequiredArgsConstructor
@RestController
public class OwnerViewController implements ApiOwnerViewController {

    private static final String TEXT_CSV = "text/csv";

    private final PrivateOwnerFacade privateOwnerFacade;

    @PostMapping("/boat/v1/private-owners/search")
    public OwnerViewResponse searchOwners(@Valid @RequestBody SearchOwnersRequest request,
                                          Pageable pageable) {
        return privateOwnerFacade.findOwners(request, pageable);
    }

    @PostMapping(value = "/boat/v1/private-owners/search", produces = TEXT_CSV)
    public ResponseEntity<Resource> exportToCsv(@Valid @RequestBody SearchOwnersRequest request, Pageable pageable)
            throws IOException {

所以我有两个方法映射到同一个 url,并且都接受 POST 请求但产生不同的内容类型 - 第一个产生application/json,而第二个产生text/csv

然后,当我尝试发出请求并设置标头时, Accept: text/csv我从服务器得到 406。

我想知道用spring真的可以做这样的事情吗?或者是改变第二种方法以使其接受GET请求的唯一方法?

谢谢

标签: javaspringspring-bootspring-mvc

解决方案


@RequiredArgsConstructor
@RestController
public class SearchController {

    @PostMapping(value = "/search", produces = {APPLICATION_JSON})
    public SearchResponse search(@Valid @RequestBody SearchRequest request,
                                          Pageable pageable) {
    }

    @PostMapping(value = "/search", produces = {TEXT_CSV})
    public ResponseEntity<Resource> export(@Valid @RequestBody SearchRequest request, Pageable pageable) throws IOException {

    }


}

推荐阅读