当从不同的JSP调用的相同方法获得200响应时,400 Bad Request

时间:2013-12-19 13:18:52

标签: jsp jquery spring-mvc http-headers

有点困惑的回应。我通过来自不同JSP页面的ajax调用调用相同的方法,并得到一个不同的HTTP response。一个给200,而另一个给400.为什么这样?

JSP页面之间的唯一区别是level/depth

实施例

  main.jsp is at level localhost/appname/main.htm
  other.jsp is at level localhost/appname/myworld/other.htm

发布Ajax调用的URL对于两者都是相同的

    function getResponse(value) {
        $.ajax({
            url: '${pageContext. request. contextPath}/posthere/callme.htm',
            data: {
                valueId: value,
            },
            type: "POST",
            success: function (data) {
                if(data == true) {
                    console.log("Success: ");
                } else {
                    console.log("Failed: ");
                }
            }
        });
    }

控制器

@Controller
@RequestMapping(value = "/posthere")
@SessionAttributes({"userSession"})
public class MyController {

   @RequestMapping(value = "/callme", method = RequestMethod.POST)
   public @ResponseBody
   boolean getcalled(@RequestParam("valueId") String valueId,
                               @ModelAttribute("userSession") UserSession userSession,
                               HttpServletResponse httpServletResponse) throws IOException {
      if(userSession != null) {
          //do your magic. Note: This logic is not getting invoked. I have a breakpoint here.
          return true;
      }
      return false; 
   }
}

2 个答案:

答案 0 :(得分:2)

检查内容类型。当内容类型为X且我发送的内容不等同于X时,我遇到了这个问题。

答案 1 :(得分:2)

在两种情况下,检查您传递的内容为valueId 如果它不能被解释为String(不太可能)或不存在,您将获得400 Bad request

您的情况可能是第二个:当idValueundefined时,将不会发送,因此Controller会收到不完整的数据 - 因此{{1 }}。