1. 程式人生 > >spring mvc 進行前後臺json資料的互動

spring mvc 進行前後臺json資料的互動

一:Spring MVC 的controller接收前臺的json的資料

獲取前臺的json的有多種方式,但是常用的有兩種方式:

(1)利用Spring提供的@Request方式,但是這中方式有很大的限制。前臺ajax的請求(1)必須用post請求(2)data:json物件必須轉化成json字串(3)必須設定contentType: "application/json;charset=UTF-8",否則後臺都無法獲得json資料。

前臺的ajax請求:

          $.ajax({
				url:"http://127.0.0.1:8080/SSM_maven/getUser",
				data:JSON.stringify(data),
				type:"POST",
				dataType: "json",
				contentType: "application/json;charset=UTF-8",
				success:function(ret){
					//console.log(ret);
					//頁面解析使用者資訊
					builder_user(ret);
					//解析分頁
					 builder_page(ret);
				},
			}); 

後臺的程式碼:

  @RequestMapping(value="/getUser")
	@ResponseBody     //返回json   
	public User getJson(@RequestBody User user){//獲得前臺傳遞過來的json字串並存儲到pojo中,這種方式只接受ajax的post請求,如果是個get請求會報錯。
		 System.out.println(user.getAddress());  
	     
		return user;
	}

1.1如果改為get請求:

    前臺報400

      

後臺報:資訊: 

Error parsing HTTP request header

 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

1.2、如果ajax不加contentType: "application/json;charset=UTF-8",

前臺報415錯誤:

     

後臺報: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

1.3如果ajax請求傳遞是json物件而不是json字串

前臺報:

     

後臺報:

 org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unrecognized token 'id': was expecting ('true', 'false' or 'null')
 at [Source: [email protected]; line: 1, column: 4]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'id': was expecting ('true', 'false' or 'null')
 at [Source: [email protected]; line: 1, column: 4]

(2)利用HttpServletRequest request請求來獲得前臺的ajax傳遞過來的json資料

前臺程式碼:

$.ajax({
				url:"http://127.0.0.1:8080/SSM_maven/GetJson",
				data:data,
				type:"POST",
				dataType: "json",
				success:function(ret){
					//console.log(ret);
					//頁面解析使用者資訊
					builder_user(ret);
					//解析分頁
					 builder_page(ret);
				},
			});
			
後臺的程式碼:
        @RequestMapping("/GetJson")
	@ResponseBody     //返回json   
	public User GetJson(HttpServletRequest request){
	   User user = CommonUtils.toBean(request.getParameterMap(), User.class);//將request中的資料全部封裝到bean中。
	    System.out.println(user.getAddress());
		return user;
	}

在這個過程中寫了將request包含的資料直接封裝到bean中的工具類,具體建立了CommonUtils和DateConverter兩個類

CommonUtils.class程式碼

package cn.zzu.util;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

/**
 * 小小工具
 *將request中資料直接載入到bean中
 *
 */
public class CommonUtils {
	/**
	 * 返回一個不重複的字串
	 * @return
	 */
	public static String uuid() {
		return UUID.randomUUID().toString().replace("-", "").toUpperCase();
	}

	/**
	 * 把map轉換成物件
	 * @param map
	 * @param clazz
	 * @return
	 * 
	 * 把Map轉換成指定型別
	 */
	@SuppressWarnings("rawtypes")
	public static <T> T toBean(Map map, Class<T> clazz) {
		try {
			/*
			 * 1. 通過引數clazz建立例項
			 * 2. 使用BeanUtils.populate把map的資料封閉到bean中
			 */
			T bean = clazz.newInstance();
			ConvertUtils.register(new DateConverter(), java.util.Date.class);
			BeanUtils.populate(bean, map);
			return bean;
		} catch(Exception e) {
			throw new RuntimeException(e);
		}
	}
}

DateConverter.class類的程式碼

package cn.zzu.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.commons.beanutils.Converter;
/**
 * 把String轉換成java.util.Date的型別轉換器
 * @author qdmmy6
 *
 */
public class DateConverter implements Converter{
	@SuppressWarnings("rawtypes")
	public Object convert(Class type, Object value) {
		if(value == null) return null;//如果要轉換成值為null,那麼直接返回null
		if(!(value instanceof String)) {//如果要轉換的值不是String,那麼就不轉換了,直接返回
			return value;
		}
		String val = (String) value;//把值轉換成String
		
		// 使用SimpleDateFormat進行轉換
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return sdf.parse(val);
		} catch (ParseException e) {
			throw new RuntimeException(e);
		}
	}
}

總結:第二種方式相對比較好些,對於前臺的ajax請求的限制相對較少,後臺獲取的前臺傳遞過來的引數相對容易靈活。

相關推薦

spring mvc 進行前後臺json資料互動

一:Spring MVC 的controller接收前臺的json的資料獲取前臺的json的有多種方式,但是常用的有兩種方式:(1)利用Spring提供的@Request方式,但是這中方式有很大的限制。前臺ajax的請求(1)必須用post請求(2)data:json物件必須

Spring mvc,jQuery和JSON資料互動

一、實驗環境的搭建 1、Spring mvc jar。 匯入spring mvc執行所需jar包。匯入如下(有多餘)     2、json的支援jar       3、加入jQuery。

使用ajax進行前後臺資料互動

1 什麼是ajax: ​ 非同步的JavaScript和xml,跟後臺互動,都用json 2 ajax幹啥用的? ​ 前後端做資料互動: 3 特點: ​ -非同步(非同步和同步的區別:同步是請求發過去,要等著迴應;非同步:不需要等迴應,可以進行其他操作) ​ -區域性重新整理: 4 使用ajax實

Spring MVC中返回JSON資料的幾種方式

我們都知道Spring MVC 的Controller方法中預設可以返回ModeAndView 和String 型別,返回的這兩種型別資料是被DispatcherServlet拿來給到檢視解析器進行繼續處理返回頁面的,而不是直接返回給客戶端的。有時候我們需要發請求後讓服務端直接返回一些資料,不再經過Dispa

spring mvc如何返回json資料

springmvc如何返回json資料 常用的方法有兩種: 1.利用Gson等json轉換工具,將物件轉換成json字串,並通過HttpServletResponse將json字串返回給前臺 @RequestMapping("/getJson1")

Spring MvcJson資料互動

在web開發中,如果想做頁面區域性重新整理的功能,那麼使用ajax最合適不過了。在spring mvc逐漸替代struts框架的今天,掌握spring mvc和json的資料互動式很有必要的。 ajax與後臺的資料互動格式有好幾種,本文主要講解以ajax以js

Spring MVC之返回Json陣列資料

建立User package com.po; public class User { private String userName; private String passWord; publ

Spring MVC中傳遞json數據時顯示415錯誤解決方法

ping 數據 value 解決方法 傳遞 ica ons pub eth 在ajax中設置 ContentType為‘application/json;charset=utf-8‘ 傳遞的data類型必須是json字符串類型:{“key”:"va

Java框架-SpringMVC的應用(json資料互動、控制器方法返回值、檔案上傳)

1. 搭建SpringMVC開發環境 1.1 建立專案,新增依賴 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" x

SpringMVC的json資料互動

                                      SpringMVC的json資料互

Spring Boot @ResponseBody 轉換 JSON資料時Date 型別處理方法

引用處: https://blog.csdn.net/molashaonian/article/details/53025118 https://blog.csdn.net/henianyou/article/details/81945409   解析JSON的方式:

Spring MVC Web請求提交資料

Spring MVC Web請求提交資料到控制器有下面幾種方法:     1.使用HttpServletRequest獲取     2.使用@RequestParam註解     3.使用自動機制封

springmvc之json資料互動

json資料格式在介面呼叫中,html頁面中較常用,json格式比較簡單,解析還比較方便。  springmvc進行json資料互動   為什麼要用json資料進行解析 最終輸出json資料,為了方便在前端介面對請求結果進行解析。 1、請求json、輸出jso

spring mvc(4)處理模型資料

處理模型資料 Spring MVC 提供了以下幾種途徑輸出模型資料: – ModelAndView: 處理方法返回值型別為 ModelAndView時, 方法體即可通過該物件新增   模型資料 – Map 及 Model: 入參為org.springframework.ui.Mo

json資料互動

springmvc 的json資料互動 - 哎幽的成長 - CSDN部落格--和老師講課相同 http://blog.csdn.net/u012373815/article/details/47208187 ----------------- 1 json資料互動 &n

【SpringMVC學習07】SpringMVC與前臺的json資料互動

json資料格式在介面呼叫中、html頁面中比較常用,json格式比較簡單,解析也比較方便,所以使用很普遍。在springmvc中,也支援對json資料的解析和轉換,這篇文章主要總結一下springmvc中如何和前臺互動json資料。 1. 兩種互動形式  springmvc和前臺互

Json資料互動格式介紹和比較

1、什麼是資料互動格式?   就是客戶端和服務端進行資訊傳輸的格式(xml和json),雙方約定用什麼格式進行傳輸,然後解析得到自己想要的值   xml擴充套件標記語言,屬於重量級(第一佔寬頻、第二解析難)   json屬於輕量級的資料互動格式(不佔寬頻,解析很簡單) 2、xml和json優缺點  

Spring mvc接收復雜資料型別

**前言:**Spring MVC在接收集合請求引數時,需要在Controller方法的集合引數裡前新增@RequestBody,而@RequestBody預設接收的enctype (MIME編碼)是application/json,因此傳送POST請求時需要設定請求報文頭資訊,否則Spri

SpringMVC與前/後臺的json資料互動

json資料格式在介面呼叫中、html頁面中比較常用,json格式比較簡單,解析也比較方便,所以使用很普遍。在SpringMVC中,也支援對json資料的解析和轉換,這篇文章主要總結一下在SpringMVC中如何和前臺互動json資料。 兩種互動形式 SpringMVC和

JavaWeb+Servlet:(二)Ajax非同步登入註冊?Servlet+Json 資料互動

上一篇文章已經將Dao層搭建好了,所以只需要編寫jsp及servlet。 具體專案訪問GitHub:連結 一、登入 1. 登入介面(index.jsp) 需要匯入並載入 jquery.js檔案 <%@ page language="java" contentType="te