Когда я пытаюсь отправить JSON на Spring MVC Controller, я получил:
POST http://localhost:8084/springAndHibernate/greet 415 (Unsupported Media Type)
Вот объявление метода, который должен, поймать "JSON:
@RequestMapping(headers ={"Accept=application/json"},value="/greet")
public String greetUser(@RequestBody Logins newLogin){
Я думал, что он должен отображать JSON в класс Logins.java, который находится здесь:
package newpackage;
public class Logins implements java.io.Serializable {
private int id;
private String login;
private String password;
public Logins() {
}
public Logins(int id) {
this.id = id;
}
public Logins(int id, String login, String password) {
this.id = id;
this.login = login;
this.password = password;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getLogin() {
return this.login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
Я отправляю POST с помощью метода jQuery ajax() следующим образом:
function onGreetingButtonClicked(e){
var contextPath='<%=request.getContextPath()%>';
jsonData = {
id: 0,
login: $("#loginInput").val(),
password: $("#passwordInput").val()
};
console.log(JSON.stringify(jsonData));
console.log((contextPath + "/greet").toString());
urlAddress = (contextPath + "/greet")
$.ajax({type: "POST",
url: urlAddress,
data: JSON.stringify(jsonData),
success: onSuccess,
contentType: "application/jsonp; charset=utf-8",
dataType: null,
traditional: true});
e.preventDefault();
}
function onSuccess(data){
alert(data);
}
Когда я удаляю
@RequestBody
из метода нет ошибок, но затем я получаю объект Logins с нулевым значением в качестве значения поля.
Я был бы очень рад, если кто-то захочет помочь мне, спасибо заранее.
На основе различных других сообщений вы должны установить для contentType значение "application/javascript"
.
Я также видел предложения использовать "application/json"
, но, глядя на страницу Википедии, ясно, что JSON-P на самом деле недействителен JSON, поэтому MIME-тип неверен, хотя некоторые браузеры, по-видимому, знают, как дело с ошибкой.
Во всяком случае, "application/jsonp"
неверен, поскольку он не является зарегистрированным MIME-типом.