当前位置: 首页 > 面试题库 >

Spring MVC 400错误请求Ajax

钮瀚
2023-03-14
问题内容

我一直在Ajax请求上收到400错误请求。我不知道这有什么问题。我正在使用:

<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

    }

编辑2:

<%@ 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类。这是我更新的书本课

 @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

}


 类似资料:
  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我得到了这个错误,有什么想法会导致它吗?我试图发送一个DTO,它有一个扩展抽象类的对象列表,我想这个问题可能是因为DTO中的列表,还是因为抽象类的子类?

  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s

  • 我正在尝试从访问代码中获取访问令牌。但存在 400 错误请求错误的错误 我正在使用此链接获取访问代码 https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 响应此链接,我正在获取查询字符串中的代码,返回 URL 代码=Mh12d04c8

  • 目标是通过ajax将对象发送到另一台服务器,这是我为CORS设置的,下面是代码。ajax代码片段: 正确发布数据,但使用

  • 我正在尝试使用HttpUrlConnection发送帖子。一切看起来都很好,但它保持返回400,就好像参数不是在DataOutputStream中发送的,或者是以错误的方式发送的。 这是返回的内容: 这很奇怪,因为这个卷曲正常工作: 它会返回我想要的访问令牌