繁体   English   中英

错误“ 400错误的请求”客户端发送的请求在语法上不正确

[英]Error “400 Bad Request” The request sent by the client was syntactically incorrect

我是jQuery的新手,并尝试使用Ajax调用Web服务。 看起来很简单的代码,但是某种程度上无法理解其失败的原因。 我尝试了所有可能的方法(我能想到的),但是不知怎么使它无法工作。

Jsp代码:

function tmpData() {
  var dataObject = JSON.stringify({
    'empfname': "First Name",
    'emplname': "Last Name"
});

alert("dataObject=" + dataObject);

$.ajax({
    url:"http://localhost:8080/OnlineStore/kmsg/grocery/tmpinfo",
    type:"POST",
    contentType: 'application/json',
    data: dataObject,
    done: setData,
    fail: displayError()
 });
}; // end of function

控制器:

@RestController
@RequestMapping("/kmsg/grocery")
public class TmpSvcImpl implements TmpSvcInt {
@Override
@RequestMapping(value = "/tmpinfo", method = RequestMethod.POST, headers = "Accept=application/json")
public @ResponseBody Map<String, Object> setData(@RequestBody final Emp employee1) throws Exception {

    System.out.println("employee1=" + employee1);
    String fname = employee1.getEmpfname();
    String lname = employee1.getEmplname();
    System.out.println("fn=" + fname ) ;
    System.out.println("ln=" + lname ) ;

    return null;
  }
}

型号类别:

public class Emp implements Serializable {

private static final long serialVersionUID = 1L;
String empfname;
String emplname;

public String getEmpfname() {
    return empfname;
}
public void setEmpfname(String empfname) {
    this.empfname = empfname;
}
public String getEmplname() {
    return emplname;
}
public void setEmplname(String emplname) {
    this.emplname = emplname;
}

public Emp(String fn, String ln){
    this.empfname = fn ;
    this.emplname = ln ;
}

@Override
public String toString() {
    return "Emp {empfname=" + empfname + ", emplname=" + emplname + "}" ;
  }
}

在该块中,您描述了:

@RestController
@RequestMapping("/kmsg/grocery")
public class TmpSvcImpl implements TmpSvcInt {
    @Override
    @RequestMapping(
             value = "/tmpinfo", 
             method = RequestMethod.POST, 
             headers = "Accept=application/json")
    public @ResponseBody Map<String, Object> setData(@RequestBody final Emp employee1) throws Exception {
        System.out.println("employee1=" + employee1);
        String fname = employee1.getEmpfname();
        String lname = employee1.getEmplname();
        System.out.println("fn=" + fname ) ;
        System.out.println("ln=" + lname ) ;
        return null;
    }
}

为这种使用情况指定“ Accept”标头并不是真正正确的。 如果要让此方法仅在content-type为'application / json'时响应,则必须添加一个消费属性'application / json'。 正如评论指出的那样,这并非绝对必要。 添加Produce属性'application / json'将确保Spring尝试将返回的内容编组为JSON结构。

@RestController
@RequestMapping("/kmsg/grocery")
public class TmpSvcImpl implements TmpSvcInt {
    @Override
    @RequestMapping(
             value = "/tmpinfo", 
             method = RequestMethod.POST, 
             consumes = "application/json",
             produces = "application/json")
    public @ResponseBody Map<String, Object> setData(@RequestBody final Emp employee1) throws Exception {
        System.out.println("employee1=" + employee1);
        String fname = employee1.getEmpfname();
        String lname = employee1.getEmplname();
        System.out.println("fn=" + fname ) ;
        System.out.println("ln=" + lname ) ;
        return null;
    }
}

将默认构造函数添加Emp类,以便Jackson可以创建它的实例,如下所示:

public class Emp implements Serializable {

    private static final long serialVersionUID = 1L;
    public String empfname;
    public String emplname;

    public String getEmpfname() {
        return empfname;
    }

    public void setEmpfname(String empfname) {
        this.empfname = empfname;
    }

    public String getEmplname() {
        return emplname;
    }

    public void setEmplname(String emplname) {
        this.emplname = emplname;
    }

    public Emp(String fn, String ln) {
        this.empfname = fn;
        this.emplname = ln;
    }

    /**
     * default constructor
     */
    public Emp() {

    }

    @Override
    public String toString() {
        return "Emp {empfname=" + empfname + ", emplname=" + emplname + "}";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM