HTTP 415

描述

在使用Easy-UI框架请求表单数据的UPDATE操作的时候,报了如下入错:
General
Request URL: http://localhost:8280/device/instrument/v1/register
Request Method: POST
Status Code: 415 
Remote Address: [::1]:8280
Referrer Policy: no-referrer-when-downgrade
---
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 103
Content-Type: application/x-www-form-urlencoded
Cookie: JSESSIONID=5576D4BE4E92115773583CDE439C6CDE
Host: localhost:8280
Origin: http://localhost:8280
Referer: http://localhost:8280/device/tag.html
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36

这里重点注意Content-Type: application/x-www-form-urlencoded,请求格式与后台的不匹配导致415错误。

原因查找

查看easyui的请求UPDATE方法得知,请求代码如下:

$("#fm").form("submit", {
                url: url,
                onSubmit: function () {
                    return $(this).form("validate");
                },
                success: function (result) {
                    var result = eval('(' + result + ')');
                    if (result.success) {
                        $.messager.alert("系统提示", "保存成功!");
                        resetValue();
                        $("#dlg").dialog("close");
                        $("#dg").datagrid("reload");
                    } else {
                        $.messager.alert("系统提示", result.errorInfo);
                    }
                }
            });

而在后台的接口接收方式如下:

    @PostMapping("/register")
    public Object register(@RequestBody @Valid Device device,
                           BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return new Response(ErrorCode.RES_NOT_EXIST, bindingResult.getFieldError().getDefaultMessage());
        }
        return deviceService.register(device);
    }

此处,有@RequestBody,因此获取数据的方式为接收Json串。因此导致这个问题。

解决方法

不使用Easyui原生的form表单UPDATE方法,使用自实现的ajax请求

if($(this).form("validate")){
    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: url,
         data: JSON.stringify($("#fm").serializeJSON()),
        success: function (result) {
            if(result.error_code == 1000) {
                $.messager.alert("系统提示", "保存成功!");
                resetValue();
                $("#dlg").dialog("close");
                $("#dg").datagrid("reload");
            } else {
                $.messager.alert("系统提示", result.errorInfo);
            }
        }
    })
 }

后台不做任何改变,由此解决问题。

你可能感兴趣的:(前端)