java - rest api - PUT 方法不消耗 GET 方法获取的数据
问题描述
我使用 GET 方法获取数据并尝试将它们提供给 PUT 方法。我收到一个错误的请求错误。但是,当我如下编辑 JSON 时,一切正常。那么为什么第一个 JSON 不起作用呢?
控制器类:
@RestController
@RequestMapping("/api")
public class FileController {
private final FileService fileService;
private final DocService docService;
private final DraftFileToPresentationConverter draftFileToPresentationConverter;
@Autowired
private DocFileRelationRepository docFileRelationRepository;
@Autowired
public FileController(FileService fileService,
DocService docService,
DraftFileToPresentationConverter draftFileToPresentationConverter) {
this.fileService = fileService;
this.docService = docService;
this.draftFileToPresentationConverter = draftFileToPresentationConverter;
}
@GetMapping("/docs/files/{id}")
public ResponseEntity<FilePresentation> getDraftFile(@PathVariable Long id) {
DraftFile file = fileService.getFile(id);
FilePresentation filePresentation = draftFileToPresentationConverter.convert(file);
return new ResponseEntity<>(filePresentation, HttpStatus.OK);
}
@PutMapping("/docs/files/{id}")
public ResponseEntity<FilePresentation> updateDraftFile(@RequestBody FilePresentation filePresentation) {
fileService.update(draftFileToPresentationConverter.convert(filePresentation));
return new ResponseEntity<>(filePresentation, HttpStatus.OK);
}
DTO:
@Data
public class FilePresentation {
private Long id;
private States state;
private String name;
private String user;
private Date dateUpload;
private Long lenght;
private IdRef document;
private IdRef judgeDoc;
public String getSize()
{
Double result = Double.valueOf(lenght/1024.0/1024.0);
if(result<1)
{
result = Double.valueOf(lenght/1024.0);
if(result<1)
{
return (lenght + " байт");
}
return (result.intValue() + " Кбайт");
}
return (result.intValue() + " Мбайт");
}
}
麻烦课:
@Data
public class IdRef {
public IdRef(Long id) {
this.id = id;
}
private Long id;
}
我使用 GET 方法获得的 JSON 并尝试输入 PUT 方法(并获得 400 Bad Request):
{
"id": 21,
"state": "DRAFT",
"name": "DNS-list.tiff",
"user": "JSmith",
"dateUpload": null,
"lenght": 28,
"document": {
"id": 141
},
"judgeDoc": null,
"size": "28 байт"
}
可以工作的 JSON
{
"id": 21,
"state": "DRAFT",
"name": "DNS-list.tiff",
"user": "JSmith",
"dateUpload": null,
"lenght": 28,
"document": 141,
"judgeDoc": null,
"size": "28 байт"
}
解决方案
IdRef 中的构造函数是原因。我删除了构造函数,现在它工作正常,我的控制器使用第一个 JSON 没有错误。
推荐阅读
- excel - 如何在多个 Excel 文件中共享重复代码?
- excel - VBA选择透视报告过滤器中大于/小于数字的所有项目
- angular - 如何为图标提供工具提示并在制表符中合并两列
- xml - 将自定义文件添加到 Nuget 包中,以便它们出现在根目录中?
- java - 无法将 Spring boot 2.1.4 应用程序部署到 WAS 9
- react-native - React-Native:防止 FlatList 渲染视口之外的任何内容
- python - 如何在 scipy.odeint 的每个时间步更新非时间相关变量
- google-apps-script - 是否有自动将电子邮件答案添加到谷歌表格的功能
- ghostscript - 除了 Illustrator for Vector 图像,如何在 PDF 中嵌入 ICC 颜色配置文件
- html - 如何通过 web html 服务器在我的计算机上运行程序?