2016-03-03 177 views
0

所以我使用的是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開發者工具控制檯的圖片,所以你們可以看到正是它顯示了我。

Chrome Console

如果任何人都可以看到我要去哪裏錯了,並指出我在正確的方向,這將是巨大的,在此先感謝。

此外,如果你們需要看到任何其他代碼,請讓我知道。

回答

0

我的問題是在Ajax中,我在尋找postById.id,當時我應該只使用我在控制器的Get方法中添加到模型中的postId