首页 > 解决方案 > 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 байт"
}

标签: javajsonrest

解决方案


IdRef 中的构造函数是原因。我删除了构造函数,现在它工作正常,我的控制器使用第一个 JSON 没有错误。


推荐阅读