Spring MVC 400 Bad Request Ajax(Spring MVC 400 Bad Request Ajax)

编程入门 行业动态 更新时间:2024-10-27 17:19:24
Spring MVC 400 Bad Request Ajax(Spring MVC 400 Bad Request Ajax)

我一直在Ajax上请求400 Bad Request。 我不知道这会有什么问题。 我在用着:

<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.5.RELEASE</version> </dependency>

控制器:

@Controller("bookController") @RequestMapping("/book") public class BookControllerImpl implements BookController { @Autowired BookService bookService; @Override @RequestMapping(value = "/new", method = RequestMethod.GET) public String addBookToSystem(Model model) { model.addAttribute("book", new Book()); return "book/newBook"; } @Override @RequestMapping(value = "/new", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Book addBookToSystem(@RequestBody Book book) { book.setBookStatus(BookStatus.AWAITING); return bookService.get(bookService.save(book)); }

Ajax调用:

$(document).ready(function(){ $('#addBook').submit(function(event) { var ISBN = $('#ISBN').val(); var author = $('#author').val(); var description = $('#description').val(); var pages = $('#pages').val(); var publicationYear = $('#publicationYear').val(); var publisher = $('#publisher').val(); var title = $('#title').val(); var json = { "ISBN" : ISBN, "author" : author, "description" : description, "pages" : pages, "publicationYear" : publicationYear, "publisher" : publisher, "title" : title }; $.ajax({ url: $("#addBook").attr("action"), data: JSON.stringify(json), type: "POST", dataType: 'json', contentType: 'application/json', success: function(book) { var respContent = ""; respContent += "<span class='success'>Dodano "; respContent += book.title; respContent += " do listy ksiazek oczekujacych na zatwierdzenie!</span>"; $("#bookResponse").html(respContent); } }); event.preventDefault(); }); });

HTTP请求:

POST /ksiazka/book/new.json HTTP/1.1 Host: localhost:8080 Connection: keep-alive Content-Length: 100 Accept: application/json, text/javascript, */*; q=0.01 Origin: http://localhost:8080 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 Content-Type: application/json Referer: http://localhost:8080/ksiazka/book/new Accept-Encoding: gzip,deflate Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4,pt;q=0.2 Cookie: SPRING_SECURITY_REMEMBER_ME_COOKIE=bWFjaWVqbWlzMkBnbWFpbC5jb206MTQxNzUzODc3ODU4NjpjYjY3YTZiMWYyMGJjODYyMDYxMDQyNDIyN2NmNjQ3Mg; JSESSIONID=c5a72acb3bd1a165f9c2d705a199

响应:

HTTP/1.1 400 Bad Request Server: GlassFish Server Open Source Edition 4.1 X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8) Content-Language: Content-Type: text/html Date: Tue, 04 Nov 2014 19:49:08 GMT Connection: close Content-Length: 1105

任何想法如何解决这个问题? 作为基础,我使用了本教程。 我搜索并阅读了400 Bad Request错误的大多数线程,但它没有解决我的问题。

编辑:图书课程:

@Entity @Table(name="Book") @Indexed public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "bookId") private Long id; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) private String title; @Column(nullable = false, unique = true) private String ISBN; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) private String author; private String publisher; @Column(length = 1000) private String description; private int publicationYear; private int pages; @Enumerated(EnumType.STRING) @Column(nullable = false) private BookStatus bookStatus; @ManyToMany(mappedBy = "booksWant", cascade = CascadeType.ALL) private List<User> user = new ArrayList<User>(0); @OneToMany(mappedBy = "book", cascade = CascadeType.ALL) private List<UserBook> bookList = new ArrayList<UserBook>(0); public Book(String title, String ISBN, String author, String publisher, String description, int publicationYear, int pages, BookStatus bookStatus) { this.title = title; this.ISBN = ISBN; this.author = author; this.publisher = publisher; this.description = description; this.publicationYear = publicationYear; this.pages = pages; this.bookStatus = bookStatus; } getters and setters }

EDIT2:

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %> <%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> <%@page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <tiles:insertDefinition name="template"> <tiles:putAttribute name="content"> <h2>book/newBook.jsp</h2> <div id="bookResponse"> </div> <div> Add a book to system: </div> <div> <sf:form id="addBook" action="${pageContext.request.contextPath}/book/new" modelAttribute="book"> <table> <tr> <td><label>isbn: </label></td> <td><sf:input path="ISBN" id="ISBN" /></td> <td><sf:errors path="ISBN" cssClas="error" /></td> </tr> <tr> <td><label>Autor: </label></td> <td><sf:input path="author" id="author" /></td> <td><sf:errors path="author" cssClas="error" /></td> </tr> <tr> <td><label>Tytul: </label></td> <td><sf:input path="title" id="title" /></td> <td><sf:errors path="title" cssClas="error" /></td> </tr> <tr> <td><label>Opis: </label></td> <td><sf:textarea path="description" id="description" /></td> <td><sf:errors path="description" cssClas="error" /></td> </tr> <tr> <td><label>Ilosc stron: </label></td> <td><sf:input path="pages" id="pages" /></td> <td><sf:errors path="pages" cssClas="error" /></td> </tr> <tr> <td><label>Rok wydawania: </label></td> <td><sf:input path="publicationYear" id="publicationYear" /></td> <td><sf:errors path="publicationYear" cssClas="error" /></td> </tr> <tr> <td><label>Wydawca: </label></td> <td><sf:textarea path="publisher" id="publisher" /></td> <td><sf:errors path="publisher" cssClas="error" /></td> </tr> <tr> <td><input name="submit" type="submit" value="Dodaj" class="btn btn-primary" /></td> </tr> </table> </sf:form> </div> </tiles:putAttribute> </tiles:insertDefinition>

Im getting 400 Bad Request on Ajax request all the time. I have no idea what's could go wrong with this. Im using:

<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.5.RELEASE</version> </dependency>

Controller:

@Controller("bookController") @RequestMapping("/book") public class BookControllerImpl implements BookController { @Autowired BookService bookService; @Override @RequestMapping(value = "/new", method = RequestMethod.GET) public String addBookToSystem(Model model) { model.addAttribute("book", new Book()); return "book/newBook"; } @Override @RequestMapping(value = "/new", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Book addBookToSystem(@RequestBody Book book) { book.setBookStatus(BookStatus.AWAITING); return bookService.get(bookService.save(book)); }

Ajax call:

$(document).ready(function(){ $('#addBook').submit(function(event) { var ISBN = $('#ISBN').val(); var author = $('#author').val(); var description = $('#description').val(); var pages = $('#pages').val(); var publicationYear = $('#publicationYear').val(); var publisher = $('#publisher').val(); var title = $('#title').val(); var json = { "ISBN" : ISBN, "author" : author, "description" : description, "pages" : pages, "publicationYear" : publicationYear, "publisher" : publisher, "title" : title }; $.ajax({ url: $("#addBook").attr("action"), data: JSON.stringify(json), type: "POST", dataType: 'json', contentType: 'application/json', success: function(book) { var respContent = ""; respContent += "<span class='success'>Dodano "; respContent += book.title; respContent += " do listy ksiazek oczekujacych na zatwierdzenie!</span>"; $("#bookResponse").html(respContent); } }); event.preventDefault(); }); });

HTTP request:

POST /ksiazka/book/new.json HTTP/1.1 Host: localhost:8080 Connection: keep-alive Content-Length: 100 Accept: application/json, text/javascript, */*; q=0.01 Origin: http://localhost:8080 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 Content-Type: application/json Referer: http://localhost:8080/ksiazka/book/new Accept-Encoding: gzip,deflate Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4,pt;q=0.2 Cookie: SPRING_SECURITY_REMEMBER_ME_COOKIE=bWFjaWVqbWlzMkBnbWFpbC5jb206MTQxNzUzODc3ODU4NjpjYjY3YTZiMWYyMGJjODYyMDYxMDQyNDIyN2NmNjQ3Mg; JSESSIONID=c5a72acb3bd1a165f9c2d705a199

Response:

HTTP/1.1 400 Bad Request Server: GlassFish Server Open Source Edition 4.1 X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8) Content-Language: Content-Type: text/html Date: Tue, 04 Nov 2014 19:49:08 GMT Connection: close Content-Length: 1105

Any ideas how to solve this? As a base I used this tutorial. I searched and read most of threads with 400 Bad Request error but it didn't solve my problem.

Edit: Book class:

@Entity @Table(name="Book") @Indexed public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "bookId") private Long id; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) private String title; @Column(nullable = false, unique = true) private String ISBN; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) private String author; private String publisher; @Column(length = 1000) private String description; private int publicationYear; private int pages; @Enumerated(EnumType.STRING) @Column(nullable = false) private BookStatus bookStatus; @ManyToMany(mappedBy = "booksWant", cascade = CascadeType.ALL) private List<User> user = new ArrayList<User>(0); @OneToMany(mappedBy = "book", cascade = CascadeType.ALL) private List<UserBook> bookList = new ArrayList<UserBook>(0); public Book(String title, String ISBN, String author, String publisher, String description, int publicationYear, int pages, BookStatus bookStatus) { this.title = title; this.ISBN = ISBN; this.author = author; this.publisher = publisher; this.description = description; this.publicationYear = publicationYear; this.pages = pages; this.bookStatus = bookStatus; } getters and setters }

Edit2:

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %> <%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> <%@page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <tiles:insertDefinition name="template"> <tiles:putAttribute name="content"> <h2>book/newBook.jsp</h2> <div id="bookResponse"> </div> <div> Add a book to system: </div> <div> <sf:form id="addBook" action="${pageContext.request.contextPath}/book/new" modelAttribute="book"> <table> <tr> <td><label>isbn: </label></td> <td><sf:input path="ISBN" id="ISBN" /></td> <td><sf:errors path="ISBN" cssClas="error" /></td> </tr> <tr> <td><label>Autor: </label></td> <td><sf:input path="author" id="author" /></td> <td><sf:errors path="author" cssClas="error" /></td> </tr> <tr> <td><label>Tytul: </label></td> <td><sf:input path="title" id="title" /></td> <td><sf:errors path="title" cssClas="error" /></td> </tr> <tr> <td><label>Opis: </label></td> <td><sf:textarea path="description" id="description" /></td> <td><sf:errors path="description" cssClas="error" /></td> </tr> <tr> <td><label>Ilosc stron: </label></td> <td><sf:input path="pages" id="pages" /></td> <td><sf:errors path="pages" cssClas="error" /></td> </tr> <tr> <td><label>Rok wydawania: </label></td> <td><sf:input path="publicationYear" id="publicationYear" /></td> <td><sf:errors path="publicationYear" cssClas="error" /></td> </tr> <tr> <td><label>Wydawca: </label></td> <td><sf:textarea path="publisher" id="publisher" /></td> <td><sf:errors path="publisher" cssClas="error" /></td> </tr> <tr> <td><input name="submit" type="submit" value="Dodaj" class="btn btn-primary" /></td> </tr> </table> </sf:form> </div> </tiles:putAttribute> </tiles:insertDefinition>

最满意答案

我解决了我的问题。 以下是我为了使其工作所做的事情:首先,我改变了对jackson2的依赖

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.3</version> </dependency>

然后我用@JsonProperty和@JsonIgnore注释我的Book类。 这是我更新的Book课程

@Entity @Table(name="Book") @Indexed public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "bookId") @JsonIgnore private Long id; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) @JsonProperty("title") private String title; @Column(nullable = false, unique = true) @JsonProperty("ISBN") private String ISBN; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) @JsonProperty("author") private String author; @JsonProperty("publisher") private String publisher; @Column(length = 1000) @JsonProperty("description") private String description; @JsonProperty("publicationYear") private int publicationYear; @JsonProperty("pages") private int pages; @Enumerated(EnumType.STRING) @Column(nullable = false) @JsonIgnore private BookStatus bookStatus; @ManyToMany(mappedBy = "booksWant", cascade = CascadeType.ALL) @JsonIgnore private List<User> user = new ArrayList<User>(0); @OneToMany(mappedBy = "book", cascade = CascadeType.ALL) @JsonIgnore private List<UserBook> bookList = new ArrayList<UserBook>(0); public Book(String title, String ISBN, String author, String publisher, String description, int publicationYear, int pages, BookStatus bookStatus) { this.title = title; this.ISBN = ISBN; this.author = author; this.publisher = publisher; this.description = description; this.publicationYear = publicationYear; this.pages = pages; this.bookStatus = bookStatus; } getters and setters }

I solved my problem. Here is what I did in order to make it work: Firstly I changed dependency to jackson2

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.3</version> </dependency>

Then I annotated my Book class with @JsonProperty and @JsonIgnore. Here is my updated Book class

@Entity @Table(name="Book") @Indexed public class Book { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "bookId") @JsonIgnore private Long id; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) @JsonProperty("title") private String title; @Column(nullable = false, unique = true) @JsonProperty("ISBN") private String ISBN; @Column(nullable = false) @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO) @JsonProperty("author") private String author; @JsonProperty("publisher") private String publisher; @Column(length = 1000) @JsonProperty("description") private String description; @JsonProperty("publicationYear") private int publicationYear; @JsonProperty("pages") private int pages; @Enumerated(EnumType.STRING) @Column(nullable = false) @JsonIgnore private BookStatus bookStatus; @ManyToMany(mappedBy = "booksWant", cascade = CascadeType.ALL) @JsonIgnore private List<User> user = new ArrayList<User>(0); @OneToMany(mappedBy = "book", cascade = CascadeType.ALL) @JsonIgnore private List<UserBook> bookList = new ArrayList<UserBook>(0); public Book(String title, String ISBN, String author, String publisher, String description, int publicationYear, int pages, BookStatus bookStatus) { this.title = title; this.ISBN = ISBN; this.author = author; this.publisher = publisher; this.description = description; this.publicationYear = publicationYear; this.pages = pages; this.bookStatus = bookStatus; } getters and setters }

更多推荐

本文发布于:2023-04-27 20:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1328608.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:MVC   Spring   Ajax   Request   Bad

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!