不支持Spring/Postman内容类型‘app/octet-stream’

pb3skfrl  于 2022-09-18  发布在  Spring
关注(0)|答案(5)|浏览(183)

我正在使用 Postman 发送以下请求:

我的控制器如下所示:

@RestController
@RequestMapping(path = RestPath.CHALLENGE)
public class ChallengeController {

    private final ChallengeService<Challenge> service;

    @Autowired
    public ChallengeController(ChallengeService service) {
        this.service = service;
    }

    @ApiOperation(value = "Creates a new challenge in the system")
    @RequestMapping(method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE},
        produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseStatus(HttpStatus.CREATED)
    public ChallengeDto create(@ApiParam(value = "The details of the challenge to create") @RequestPart("challengeCreate") @Valid @NotNull @NotBlank ChallengeCreateDto challengeCreate,
                           @ApiParam(value = "The challenge file") @RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
        return service.create(challengeCreate, file);
    }
}

我已经尝试将删除APPLICATION_OCTET_STREAM_VALUE的“消耗”更改为MULPART_FORM_DATA_VALUE,并尝试删除它,但这些操作都没有帮助。

如果您需要更多信息,请告诉我。谢谢。

3pvhb19x

3pvhb19x1#

@Rokin答案很好,但不需要将json放在文件中并上传。您也可以通过将内容类型传递给json对象来实现。 Postman 在发送表单数据时支持内容类型选项。有关更多信息,请参见下图,它是自我描述的。

bvn4nwqk

bvn4nwqk2#

在Postman中,为了让Spring的@RequestPart处理json对象,您需要将json对象作为文件而不是文本发送。

ChallengeCreateDto的内容放入json文件,保存为challenge.json。然后将该文件上传到Postman中,类型为文件。我附上了一个截图,说明 Postman 的请求应该是怎样的,只是为了让它更清楚。

您还可以在较新版本的Spring中使用@PostMap而不是@RequestMap,如下所示

@ResponseStatus(HttpStatus.CREATED)
@PostMapping()
public ChallengeDto create(@RequestPart("challengeCreate") ChallengeCreateDto challengeCreate, 
    @RequestPart("file") MultipartFile file) {
        return service.create(challengeCreate, file);
    }
ejk8hzay

ejk8hzay3#

使用@RequestParam获取字符串和文件将解决此问题。在Postman中,使用Content-Type作为“Multipart/Form-Data”,并在Body中将输入定义为Form-Data。

请参阅https://stackoverflow.com/a/38336206/1606838

示例:

@PostMapping(consumes = {"multipart/form-data"})
public Output send(@RequestParam String input, @RequestParam MultipartFile file) {

}
ujv3wf0j

ujv3wf0j4#

Content-Type是标头设置,默认情况下未选中,默认为应用程序八位字节流。只需选中Headers功能区项目下的框(一旦选中,则默认为应用程序/json)。

相关问题