[SPRING] 봄 MVC 400 나쁜 요청 아약스
SPRING봄 MVC 400 나쁜 요청 아약스
Im은 항상 400 건의 Ajax 요청에 대한 요청을 받고 있습니다. 나는 이것으로 무엇이 잘못 될 수 있는지 전혀 모른다. 사용하고있는 Im :
<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 잘못된 요청 오류가있는 스레드의 대부분을 읽었지만 내 문제를 해결하지 못했습니다.
편집하다: 책 클래스 :
@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
}
첫 번째 :
<%@ 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>
해결법
-
==============================
1.나는 내 문제를 해결했다. 여기 그것이 작동하게하기 위해 내가 한 일입니다. 첫째로 나는 jackson2에 의존성을 바꿨다.
나는 내 문제를 해결했다. 여기 그것이 작동하게하기 위해 내가 한 일입니다. 첫째로 나는 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>
그런 다음 @ BookProperty 및 @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 }
-
==============================
2.ajax 호출에서 " 'contentType :'application / json '을 (를) 제거하십시오.
ajax 호출에서 " 'contentType :'application / json '을 (를) 제거하십시오.
from https://stackoverflow.com/questions/26744307/spring-mvc-400-bad-request-ajax by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] jsf 2.0으로 스프링 웹 플로우를 구성하는 방법은 무엇입니까? (0) | 2019.04.27 |
---|---|
[SPRING] 봄 OAUTH2 - 액세스 토큰 만료 시간 (0) | 2019.04.27 |
[SPRING] Autowired .. 하나 이상? (0) | 2019.04.27 |
[SPRING] 관리 속성의 getter를 호출 할 때 NPE (0) | 2019.04.26 |
[SPRING] @ Configurable-Beans는 Spring Boot에서 JPA-EntityListeners와 함께 작동하지 않습니다. (0) | 2019.04.26 |