2018/1/5 学习记录 Ajax提交数据自动转化为对象

前端之家收集整理的这篇文章主要介绍了2018/1/5 学习记录 Ajax提交数据自动转化为对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  • SpringMVC中JSON自动转化对象
    -在进行api开发时,通过ajax在controller层直接传入一个对象方便又实用,但是细节方面却有很多技巧。
    昨天晚上遇到的问题:controller能够识别到参数,但是传入的值全部为空,在网上找了很久,一般的解决办法是设置传入content的类型为application/json,导入fastjson的两个包,然鹅,这样并没有解决我的问题。最后自己设置成x-www-form-urlencode解决了。现在整理一下,给出自动转化对象的解决方案。
    -entity对象:
  1. public class QueryString {
  2. String vcn;
  3. Integer vol;
  4. String spd;
  5. String textPut;
  6. String textType;
  7.  
  8. @Override
  9. public String toString() {
  10. return "QueryString{" +
  11. "vcn='" + vcn + '\'' +
  12. ",vol=" + vol +
  13. ",spd='" + spd + '\'' +
  14. ",textPut='" + textPut + '\'' +
  15. ",textType='" + textType + '\'' +
  16. '}';
  17. }
  18.  
  19. public String getVcn() {
  20. return vcn;
  21. }
  22.  
  23. public QueryString setVcn(String vcn) {
  24. this.vcn = vcn;
  25. return this;
  26. }
  27.  
  28. public Integer getVol() {
  29. return vol;
  30. }
  31.  
  32. public QueryString setVol(Integer vol) {
  33. this.vol = vol;
  34. return this;
  35. }
  36.  
  37. public String getSpd() {
  38. return spd;
  39. }
  40.  
  41. public QueryString setSpd(String spd) {
  42. this.spd = spd;
  43. return this;
  44. }
  45.  
  46. public String getTextPut() {
  47. return textPut;
  48. }
  49.  
  50. public QueryString setTextPut(String textPut) {
  51. this.textPut = textPut;
  52. return this;
  53. }
  54.  
  55. public String getTextType() {
  56. return textType;
  57. }
  58.  
  59. public QueryString setTextType(String textType) {
  60. this.textType = textType;
  61.  
  62. return this;
  63. }
  64. }

Controller层:

  1. @ResponseBody
  2. @RequestMapping(value = "/api/voice",method = RequestMethod.POST,produces =
  3.  
  4. MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8"
  5.  
  6. )
  7. public String voice(QueryString queryString) throws Exception {
  8.  
  9. logger.debug(queryString.toString());
  10. try {
  11. System.out.println(queryString.toString());
  12. Result result = voiceService.getVoice(queryString);
  13. return JSON.toJSONString(result);
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. throw e;
  17. }
  18. }

Ajax提交的方法

  1. $.ajax({
  2. type: 'post',url: "/api/voice",data: {"vcn": vcn,"vol": vol,"spd": spd,"textPut": textPut,"textType": textType},contentType: "application/x-www-form-urlencoded;charset=utf-8",success: function (res) {
  3. if (0 == res["status"]) {
  4. music = res['data'][0];
  5. $("#urls").html("<a>" + music + "</a>")
  6. $("#show_play").removeAttr('hidden');
  7. $("#show_play button").on('click',function () {
  8. window.location.href = music;
  9. });
  10.  
  11. } else {
  12. layer.msg(res["msg"]);
  13. }
  14. $("#showTooltips").attr('class',"weui-btn weui-btn_primary");
  15. },error: function (res) {
  16. layer.msg("错误码:" + res.status);
  17. $("#showTooltips").attr('class',"weui-btn weui-btn_primary");
  18. }
  19. });

最好在WEB-INF/web.xml中设置一下乱码过滤器:

  1. <!--spring为我们提供的乱码过滤器-->
  2. <filter>
  3. <filter-name>CharacterEncodingFilter</filter-name>
  4. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  5. <init-param>
  6. <param-name>encoding</param-name>
  7. <param-value>utf-8</param-value>
  8. </init-param>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>CharacterEncodingFilter</filter-name>
  12. <url-pattern>/*</url-pattern>
  13. </filter-mapping>

这样就基本OK,ajax传入的是一个application/x-www-form-urlencode类型的对象,注意这里不是application/json,也没有通过JSON.stringify()格式化,在controller层中,我们通过直接对方法传入对象,获取到的request的数据的格式是通过RequestMapping指定的:
produces = MediaType.APPLICATION_JSON_VALUE + “;charset=UTF-8”

这样我们就可以通过Springmvc自动转化json参数为对象了。

注: maven中的Spring相关的依赖都是4.3.x

猜你在找的Ajax相关文章