ajax请求 spring mvc responsebody 注解的方法 为啥写不了cookie

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax请求 spring mvc responsebody 注解的方法 为啥写不了cookie相关的知识,希望对你有一定的参考价值。

debug一下,看看controller是不是能走到最后,如果能就不是java代码问题,不能的话就是代码问题的问题了。能走到最后,但是不走success的话就需要firebug看一下ajax请求了,看看是不是requestMapping路径不小心写错了,或者http errorcode多少等等。一步一步排查,这都是小问题,需要的细心和耐心。 参考技术A

Cookie cookie = new Cookie(cookieName,"2333");
cookie.setPath("/");
response.addCookie(cookie);

一定要给cookie 设置一个path

本回答被提问者采纳

无法向spring mvc控制器发送ajax post请求

【中文标题】无法向spring mvc控制器发送ajax post请求【英文标题】:Unable to send ajax post request to spring mvc controller 【发布时间】:2021-08-09 16:00:32 【问题描述】:

我正在尝试在单击按钮时发送 ajax 发布请求, 我的jsp表单是

 <body>
 <form name="userForm" id="userForm"  method="POST">
  <table><tbody id="uniform">
  <tr>
  </tr>
  <tr>
    <td>Name</td>
    <td><input name="name" type="text" /></td>
  </tr>
  <tr>
    <td>Rashi</td>
    <td><input name="rashi" type="text" /></td>
  </tr>
   <tr>
    <td>Gothram</td>
    <td><input name="gothram" type="text" /></td>
  </tr>
   <tr>
    <td>Gender</td>
    <td><input name="gender" type="text" /></td>
  </tr>
  <tr>
    
    <td><button class="btn btn-default" onclick="addProfile()">Add</button></td>
  </tr>
  </tbody>
  </table>
  </form></body>

js中的函数,即addProfile()是,

    function addProfile()
    alert("inside profile");
    $.ajax(
    url: "saveUser",
    type: "POST",
    data:  new FormData(this), // Data sent to server
    contentType: false, // The content type used when sending data to the server.
    cache: false, // To unable request pages to be cached
    processData:false,  // To send DOMDocument or non processed data file it is set to false
    success: function(data)
        alert($profile_id);
            if(data=="registered")
            
    ,
    error: function()             
     );
     

我的控制器代码是,

@RequestMapping(value="/saveUser", method = RequestMethod.POST)
@ResponseBody
public void insert(ModelMap model, Principal principal,HttpSession session,@ModelAttribute @Valid Profile profile,
         BindingResult result) throws IOException 
    System.out.println(" inside insert  ");
    
   System.out.println("profilec name"+profile.getName());
   System.out.println(result.getErrorCount());
   int profile_id=service.Insert(profile);
    model.addAttribute("profile_id",profile_id);
   

spring-security 文件是

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:security="http://www.springframework.org/schema/security"
   xmlns:p="http://www.springframework.org/schema/p" 
   xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd
                       http://www.springframework.org/schema/security
                       http://www.springframework.org/schema/security/spring-security-3.1.xsd">

   <security:global-method-security secured-annotations="enabled" />
    <security:http auto-config="true" >
    <security:intercept-url pattern="/index*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <security:access-denied-handler error-page="/login"/>
    
    <security:form-login login-page="/login" default-target-url="/index"
        authentication-failure-url="/fail2login" 
        username-parameter="username"
        password-parameter="password" />
    <security:logout logout-success-url="/logout" />

   </security:http>

    <security:authentication-manager>
    <security:authentication-provider>
  <!-- <security:password-encoder ref="encoder" /> -->
    <security:jdbc-user-service data-source-ref="dataSource"
            users-by-username-query=
                "select username,password, enabled from USER_MASTER where username=?"
            authorities-by-username-query=
                "select username,USER_ROLE from USER_ROLE where username =?  " />
                            
    </security:authentication-provider>
  
    </security:authentication-manager>

    <bean id="encoder"
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
    <constructor-arg name="strength" value="10" />
    </bean>
    </beans>

即使我删除了 ajax 代码,我也收到了 405 错误,就像这样

function addProfile()
    alert("inside profile");
   
     

我收到警报,但在收到错误代码后,

我的个人资料 bean 类是,

public class Profile 

private String name;


private String rashi;


public String getName() 
    return name;


public void setName(String name) 
    this.name = name;


public String getRashi() 
    return rashi;


public void setRashi(String rashi) 
    this.rashi = rashi;


public String getGothram() 
    return gothram;


public void setGothram(String gothram) 
    this.gothram = gothram;


public String getGender() 
    return gender;


public void setGender(String gender) 
    this.gender = gender;


private String gothram;

private String gender;
 

不允许使用 405 方法的原因是什么?

【问题讨论】:

你的页面刷新了吗?如果是,您的表单正在提交,则不会启动 ajax 调用。 即使我删除了 ajax 代码,我也会收到 405 错误 - 那么 (显然) 而不是导致 405 的 ajax POST。看在浏览器网络选项卡中仔细查找导致 405 的的确切原因。 【参考方案1】:

在您的addProfile() 呼叫之后发布的是您的form

你的按钮是

<button class="btn btn-default" onclick="addProfile()">

没有type=,默认是type=submit,所以你的按钮会导致表单提交到表单的URL,如果没有设置,它将与页面的URL相同,它是this(页面) 给出 405 的 url。

最简单的解决方案是将按钮更改为

<button type='button' class="btn btn-default" onclick="addProfile()">

这样它就不会提交表单。


其他选项:

你可以

将 onclick 更改为 onclick="addProfile();return false;"

onclick="return addProfile(); return false 来自 addProfile()(在 $.ajax(); 之后)

或(首选)

使用 jquery 绑定您的事件并从提交尝试中返回 false

【讨论】:

以上是关于ajax请求 spring mvc responsebody 注解的方法 为啥写不了cookie的主要内容,如果未能解决你的问题,请参考以下文章

Ajax+Spring MVC实现跨域请求(JSONP)

在 Spring MVC 中如何处理 Ajax 请求?

在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法

Ajax+Spring MVC实现跨域请求(JSONP)(转)

spring mvc 如何处理jquery ajax请求

如何从 Spring MVC 控制器返回对象以响应 AJAX 请求?