使用Jackson将多部分文件从Angular反序列化为Java

使用Jackson将多部分文件从Angular反序列化为Java,java,angular,spring-boot,jackson,Java,Angular,Spring Boot,Jackson,我正在使用SpringBoot 1.5.9和Angular 5开发一个REST应用程序,我需要向SpringBoot后端发送一个REST请求,以便将一个对象保存到数据库中 在前端,用户填写表单并提交。以下是创建对象的接口,以便将对象作为REST调用发送到后端 export class Item { public id:number; public name:string; public workDescription:string; public image:F

我正在使用SpringBoot 1.5.9和Angular 5开发一个REST应用程序,我需要向SpringBoot后端发送一个REST请求,以便将一个对象保存到数据库中

在前端,用户填写表单并提交。以下是创建对象的接口,以便将对象作为REST调用发送到后端

export class Item {

    public id:number;
    public name:string;
    public workDescription:string;
    public image:FormData;
    public comment:string;
}
我正在使用模型映射器库将上述对象反序列化为Java中的以下类

@Getter
public class ItemDto {

    private int id;

    private String name;

    private String workDescription;

    private CommonsMultipartFile image;

    private String comment;
}
这是我的控制器,它接收我从前端发送的对象:

@RequestMapping(value = "/items", method = RequestMethod.POST, consumes = { "application/json",
            "multipart/form-data" }, produces = "application/json")
    @ResponseBody
    @Transactional
    public ResponseEntity<String> createItem(@Valid @DTO(ItemDto.class) Item item,
            @RequestParam(value = "work", required = true) String workId,
            UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request) {
}

我试过好几种方法,但都没能成功。非常感谢你

因为
commonmultipartfile
没有Jackson转换它的默认构造函数。我会在声明的顶部添加
@JsonIgnore
,以避免Jackson尝试反序列化。然后你就可以试着把文件放进去了。检查这个
@RequestMapping(value = "/items/images", method = RequestMethod.POST, headers = "content-type=multipart/form-data")
    @Transactional
    public ResponseEntity<?> uploadItemImage(@RequestParam("item") String itemId,
            @RequestParam("file") MultipartFile multipartFile, UriComponentsBuilder uriComponentsBuilder) {
Some Implementation....
}