Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Spring PostMapping接收具有空值的对象_Javascript_Java_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Javascript Spring PostMapping接收具有空值的对象

Javascript Spring PostMapping接收具有空值的对象,javascript,java,spring,spring-mvc,spring-boot,Javascript,Java,Spring,Spring Mvc,Spring Boot,我正在编写一个SPRING控制器来管理一些实体,在尝试编辑现有对象时遇到了问题 以下是生成问题的get/post映射: @GetMapping(value = "/category/{id}/edit") public String editCategoryGET(@PathVariable int id, Model model) { Category category = repositoriesServices.getCategoryById(id); log.info("

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

以下是生成问题的get/post映射:

@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对象时,正如您在日志底部看到的那样,它来自DB,但当它来自POST时,imageBase64字段为空

ajax POST调用是这样完成的:

var form = $('#form');
$.ajax({
    type: "POST",
    url: form.attr("action"),
    data: new FormData(form[0]),
    processData: false,
    contentType: false,
    dataType: 'json'
}).done(.........
我已经读过了,但是如果我把@RequestBody放进去,我会得到这个错误:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryZJlpA2NOKy6YhELW;charset=UTF-8' not supported
即使我将consumes=MediaType.ALL_值属性放入

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

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

function getFormDataAsJSON() {
    var json = {};
    json.name = $('#name-input').val();
    json.imageBase64 = $('#logo-preview').attr('src');
    return json;
}


var form = $('#form');
var postData = {};
postData.formData = new FormData(form[0]);
var flag = false;
if ($('#div-visible-only-in-edit-way').length !== 0) {
    flag = true;
    postData.jsonData = getFormDataAsJSON();
}
$.ajax({
    type: "POST",
    url: form.attr("action"),
    data: flag ? JSON.stringify(postData.jsonData) : postData.formData,
    processData: false,
    contentType: flag ? "application/json; charset=utf-8" : false,
    dataType: 'json'
}).done(function (e) {

当您添加@RequestBody时,您需要json数据,但需要从客户端发送表单数据


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

添加@RequestBody时,您需要json数据,但需要从客户端发送表单数据。将您的javascript代码更改为发送json数据。我已经用您的注释解决了问题,如果您将其作为答案,我将接受为正确答案。我很高兴它能帮助您,添加了注释以帮助其他人。另外,我建议你用有效的请求编辑你的答案。我已经做了,再次感谢你!
function getFormDataAsJSON() {
    var json = {};
    json.name = $('#name-input').val();
    json.imageBase64 = $('#logo-preview').attr('src');
    return json;
}


var form = $('#form');
var postData = {};
postData.formData = new FormData(form[0]);
var flag = false;
if ($('#div-visible-only-in-edit-way').length !== 0) {
    flag = true;
    postData.jsonData = getFormDataAsJSON();
}
$.ajax({
    type: "POST",
    url: form.attr("action"),
    data: flag ? JSON.stringify(postData.jsonData) : postData.formData,
    processData: false,
    contentType: flag ? "application/json; charset=utf-8" : false,
    dataType: 'json'
}).done(function (e) {