所以我使用的是Spring MVC,我試圖做一個AJAX帖子來將comment
添加到Post
實體中,就像典型的社交網絡一樣。我在Chrome開發者工具中發現一個錯誤,該錯誤代碼爲Failed to load resource: the server responded with a status of 400 (Bad Request)
。我在想,這可能意味着我的控制器出了問題,但是這種設置的方式,它不會讓我在調試模式下檢查它。Spring MVC Ajax Post 400錯誤(錯誤請求)
我會告訴你們所有的代碼一起工作,以便你們可以更好地理解我的問題。
因此,這是我的Ajax,並且所有內容都正在運行,併發送「出現錯誤」消息,因此它至少運行代碼併到達控制器。
另外CDATA
東西是爲Thymeleaf。
<script th:inline="javascript">
/*<![CDATA[*/
var postById = /*[[${postById.id}]]*/'1';
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
$(document).ready(function(){
$("#submit").on("click", function(ev) {
ev.preventDefault();
$.ajax({
url : "newComment",
type : "post",
data : {
"postById" : postById,
"newComment" : $("#newComment").val()
},
success : function(data) {
console.log(data);
location.reload();
},
error : function() {
console.log("There was an error");
//location.reload();
}
});
});
});
/*]]>*/
</script>
這裏是我的控制器GET方法
@RequestMapping(value="viewCourse/post/{postId}", method=RequestMethod.GET)
public ModelAndView postViewGet (@RequestParam(value = "pageSize", required = false) Integer pageSize,
@RequestParam(value = "page", required = false) Integer page, @PathVariable Long postId) {
ModelAndView modelAndView = new ModelAndView("post");
{
// Evaluate page size. If requested parameter is null, return initial
// page size
int evalPageSize = pageSize == null ? INITIAL_PAGE_SIZE : pageSize;
// Evaluate page. If requested parameter is null or less than 0 (to
// prevent exception), return initial size. Otherwise, return value of
// param. decreased by 1.
int evalPage = (page == null || page < 1) ? INITIAL_PAGE : page - 1;
//StudySet studySet = studySetRepo.findOne(studySetId);
//List <Row> rows = studySet.getRows();
//Set<Row> rowSet = new TreeSet<Row>(rows);
Post postById = postRepo.findOne(postId);
Comment comment = new Comment();
Page<Comment> postComments = commentService.findByPostOrderByIdDesc((postById), new PageRequest(evalPage, evalPageSize));
Pager pager = new Pager(postComments.getTotalPages(), postComments.getNumber(), BUTTONS_TO_SHOW);
modelAndView.addObject("postId", postId);
modelAndView.addObject("postById", postById);
modelAndView.addObject("postComments", postComments);
modelAndView.addObject("comment", comment);
modelAndView.addObject("selectedPageSize", evalPageSize);
modelAndView.addObject("pageSizes", PAGE_SIZES);
modelAndView.addObject("pager", pager);
return modelAndView;
}
}
這裏是我的控制器POST方法
@RequestMapping(value="viewCourse/post/newComment", method=RequestMethod.POST)
public @ResponseBody Post newComment (@Valid @RequestParam Long postId, @RequestParam String newComment, ModelMap model, @AuthenticationPrincipal User user)
{
Post post = postRepo.findOne(postId);
Comment comment = new Comment();
comment.setComment(newComment);
comment.setPost(post);
comment.setDate(LocalDate.now());
comment.setTime(LocalTime.now());
comment.setDateTime(LocalDateTime.now());
comment.setUser(user);
user.getComments().add(comment);
post.getComments().add(comment);
commentRepo.save(comment);
Post savedPost = postRepo.save(post);
return savedPost;
}
而且我在實體對象的一些註釋,可能有一些用它做。
這裏是我的用戶實體
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user", orphanRemoval = true)
@JsonManagedReference
public Set<Comment> getComments() {
return comments;
}
public void setComments(Set<Comment> comments) {
this.comments = comments;
}
這裏是我的評論實體
@ManyToOne
@JsonBackReference
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
而且這是我在Chrome開發者工具控制檯的圖片,所以你們可以看到正是它顯示了我。
如果任何人都可以看到我要去哪裏錯了,並指出我在正確的方向,這將是巨大的,在此先感謝。
此外,如果你們需要看到任何其他代碼,請讓我知道。