我正在使用 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,并尝试删除它,但这些操作都没有帮助。
如果您需要更多信息,请告诉我。谢谢。
5条答案
按热度按时间3pvhb19x1#
@Rokin答案很好,但不需要将json放在文件中并上传。您也可以通过将内容类型传递给json对象来实现。 Postman 在发送表单数据时支持内容类型选项。有关更多信息,请参见下图,它是自我描述的。
bvn4nwqk2#
在Postman中,为了让Spring的@RequestPart处理json对象,您需要将json对象作为文件而不是文本发送。
将ChallengeCreateDto的内容放入json文件,保存为challenge.json。然后将该文件上传到Postman中,类型为文件。我附上了一个截图,说明 Postman 的请求应该是怎样的,只是为了让它更清楚。
您还可以在较新版本的Spring中使用@PostMap而不是@RequestMap,如下所示
ejk8hzay3#
使用@RequestParam获取字符串和文件将解决此问题。在Postman中,使用Content-Type作为“Multipart/Form-Data”,并在Body中将输入定义为Form-Data。
请参阅https://stackoverflow.com/a/38336206/1606838
示例:
ujv3wf0j4#
Content-Type是标头设置,默认情况下未选中,默认为应用程序八位字节流。只需选中Headers功能区项目下的框(一旦选中,则默认为应用程序/json)。
yqlxgs2m5#
this solved my issue by passing c