Spring PostMapping接收具有空值的对象

时间:2018-08-04 20:34:36

标签: javascript java spring spring-mvc spring-boot

我正在编写一个SPRING控制器来管理某些实体,尝试编辑现有对象时遇到麻烦。

这是我的获取/发布映射,它会产生问题:

   $('.jsmatchdate').text( function (_,txt) {
     return txt.split(' ')[0];
   })

类别类是这个:

@GetMapping(value = "/category/{id}/edit")
public String editCategoryGET(@PathVariable int id, Model model) {
    Category category = repositoriesServices.getCategoryById(id);
    log.info("editCategoryGET: " + category);
    // set model attribute etc....
}

@PostMapping(value = "/category/{id}/edit")
public @ResponseBody
ResponseEntity editCategoryPOST(@PathVariable int id, Category category) {
    log.info("editCategoryPOST: " + category);
    // code...
}

当我尝试编辑@Entity @Table(name = "categories") public class Category { @GeneratedValue(strategy = GenerationType.AUTO) @Id private int id; private String name; @Lob private String imageBase64; @Transient private MultipartFile image; // getter setter } 对象时,正如您在日志底部看到的那样,它直接来自数据库,但是当它来自Category时,POST字段为{{ 1}}。

imageBase64

ajax null调用是通过以下方式完成的:

editCategoryGET: Category{id=1, name='vdsvsdv', imageBase64='data:image/png;base6...'}
editCategoryPOST: Category{id=1, name='vdsvsdv', imageBase64='null'}

我已经读过this,但是如果我放POST,则会出现此错误:

var form = $('#form');
$.ajax({
    type: "POST",
    url: form.attr("action"),
    data: new FormData(form[0]),
    processData: false,
    contentType: false,
    dataType: 'json'
}).done(.........

即使我设置了@RequestBody属性。

我知道我可以通过再次调用DB来获取旧数据来解决,但我希望有一种最干净的方法

解决方案: 我已经解决了编辑后发送json数据的问题:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryZJlpA2NOKy6YhELW;charset=UTF-8' not supported

1 个答案:

答案 0 :(得分:1)

添加@RequestBody时,您期望使用json数据,但会从客户端发送表单数据。

您应该更改JavaScript代码以发送json请求。