① springmvc接收json格式參數需要什麼配置
$("#btSaveTemplate").click(function()
{
// alert($("#templateName").val());
var data = {"info":{"templateName":$("#templateName").val(),"templateNo":"tmp156464"}};
var data2 = {"templateName":$("#templateName").val()};
$.ajax({
type: "get",//使用get/post方法訪問後台
dataType: "json",//返回json格式的數據
url: "lotty/add",//要訪問的後台地址
data: data,
success: function(msg){//msg為返回的數據,在這里做數據綁定
if(msg == '1'){
alert('操作成功');
location.reload();
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert("error:" + textStatus + " exception:" + errorThrown);
}
});
後台spring確實收到了請求,並且執行了相應的方法,如下:
Java代碼
@ResponseBody
@RequestMapping(value="/add", method=RequestMethod.GET)
public String doAdd([color=red][b]String info[/b][/color],Model model) throws Exception;
紅色粗體的地方,用String接收是null,改用List和HashMap都不行,後來在SPRING的JAR包中,翻到一個MappingJacksonJsonView,嘗試了下,還是空值。之後,我在方法里加了HttpServletRequest參數,郁悶的是:request裡面的parameter部分為空
我想可能是SPRING注入處理JSON類的地方出錯了,但是這個也不太可能。因為我傳最基本的純key-value結構的JSON數據,後台能成功捕獲到(我的做法比較笨,前台有多少個key,controller方法里有多少個對應參數的那種)
這是我SPRING的相關配置:
Java代碼
<bean id="" class="org.springframework.http.converter.json."/>
然後注入:
Java代碼
<bean class="org.springframework.web.servlet.mvc.annotation.">
<property name="messageConverters">
<list>
<ref local=""/>
</list>
</property>
</bean>
到此,實在不知道其他的解決方法了。
我的想法是,在實際應用中如果做批量插入的話,可以一次提交一個大的JSON數據,在後台里解析成JSONObject對象,再逐步取值。試了大半天,沒有結果,上來問問大家,SPRING3裡面JSON做參數的一些經驗。
問題補充:
amcucn 寫道
簡單點的方法以就是直接將你要傳的json數據當成一個字元串提交到後台,後台使用JSONObject相關的方法 可以直接轉成對應的MAP對象。然後你就可以處理了。大致的想法就是繞過springmvc本身的json處理類,把你想的"JSON"當成字元串傳到後台。
也只能這樣,看來SPRING3.0.5並沒有能夠很好的集成JSONObject的解決方案,只是死板地提供了參數對應和VO去封裝JSON信息。
② springMvc配置文件中設置JSON數據轉換不起作用
3.1 jar包準備
Springmvc默認用對json數據進行轉換,需要加入jackson的包,如下:
3.2 springmvc.xml文件中的配置
1) 如果配置文件中配置過註解驅動(<mvc:annotation-driven/>), 則無需多餘配置
2) 如果沒有配置註解驅動, 則需如下配置(不推薦使用這種方式)
<!--註解適配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json."></bean>
</list>
</property>
</bean>
4. Controller的編寫
@RequestMapping("/testJson.action")
@ResponseBody
public Items testJson (@RequestBody Items items) {
return items;
}
對應jsp頁面中js的編寫
function jsonTest () {
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/item/testJson.action",
contentType:"application/json;charset=utf-8",
data:'{"name":"測試商品","price":99.9}',
success:function (data) {
alert(data.name);
}
});
}
③ 在Spring 3 MVC中怎麼動態的讓jackson忽略欄位
可以用註解來註明jackson不需要載入的屬性,但必須是編碼的形式..動態去忽略欄位貌似做不到.不過有一種方法就是將要忽略的欄位賦值為null 然後讓jackson轉換json的時候忽略值為null的屬性...這樣應該就達到了你說的效果.
④ 在Spring 3 MVC中怎麼動態的讓jackson忽略欄位
@jsonIgnore 如果使用這個,是雙向忽略了,序列和反序列,這個欄位都被忽略了,如何通過config的方式。來主動忽,例如序列化忽略,反序列時,不忽略或者相反。
⑤ springmvc怎麼接受前台傳進來的json數據
json作為一種輕量級
的數據交換格式,在前後台數據交換中占據著非常重要的地位。Json的語法非常簡單,採用的是鍵值對表示形式。JSON 可以將 JavaScript
對象中表示的一組數據轉換為字元串,然後就可以在函數之間輕松地傳遞這個字元串,或者在非同步應用程序中將字元串從 Web
客戶機傳遞給伺服器端程序,也可以從伺服器端程序傳遞json格式的字元串給前端並由前端解釋。這個字元串是符合json語法的,而json語法又是
javascript語法的子集,所以javascript很容易解釋它,而且
JSON 可以表示比"名稱 / 值對"更復雜的結構。下面我們通過實例來看看JQuery傳遞/解析json格式的數據是如何實現的。
1.首先來看前端jsp代碼:
[html] view plain
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="/springMVC6/js/jquery-1.7.2.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
$(document).ready(function(){
//傳遞字元串格式json對象到後台(一個json對象)
$("#resolveJsonObject").click(function(){
var userName =encodeURI($("#userName").attr("value"));
var age = encodeURI($("#age").attr("value"));
var user = {userName:userName,age:age};
var aMenu = encodeURI(JSON.stringify(user));
$.ajax({
url:"/springMVC6/user/data/resolveJsonObject" ,
data:"orderJson=" + aMenu,
success:function(data){
}
});
});
//傳遞json數組到後台
$("#resolveJsonArray").click(function(){
var userName =encodeURI($("#userName").attr("value"));
var age = encodeURI($("#age").attr("value"));
//數組開始
var user1 = {userName:userName,age:age};
var allMenu={
"menu":[ ]
};
allMenu.menu.push(user1);
var allMenu1 = encodeURI(JSON.stringify(allMenu));
$.ajax({
//json數組
url:"/springMVC6/user/data/resolveJsonArray" ,
data:"orderJson=" + allMenu1,
success:function(data){
}
});
});
//接收後台的json在前台解析
$("#resolveJson").click(function(){
$.ajax({
//解析從後台返回的json數據
url:"/springMVC6/user/data/resolveJson" ,
type:"post",
success:function(data){
var arr=eval(data);
alert(arr.length);
for(var m = 0;m<arr.length;m++){
alert(arr[m].user.userName);
}
}
});
});
});
</script>
</head>
<body>
<h1>json添加用戶</h1>
姓名:<input id="userName" type="text" name="userName">
年齡:<input id="age" type="text" name="age"><br>
<input type="button" id="resolveJsonObject" value="json對象">
<input type="button" id="resolveJsonArray" value="json數組">
<input type="button" id="resolveJson" value="前端解析json字元串">
</body>
</html>
2.使用javabean解析前端數據:
[java] view plain
package com.tgb.web.controller.annotation;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tgb.web.controller.entity.User;
@Controller
@RequestMapping("/user/data")
public class DataController {
//接收前台傳過來的字元串格式的json對象,在後台進行解析
@RequestMapping("/resolveJsonObject" )
public void resolveJsonObject(HttpServletRequest request,HttpServletResponse response) throws IOException {
//解碼
String str = URLDecoder.decode(request.getParameter("orderJson"),"UTF-8");
JSONObject jb=new JSONObject();
//將json格式的字元串轉換為json對象,並取得該對象的「userName」屬性值
String o=(String)jb.fromObject(str).get("userName");
System.out.println(o);
}
//傳遞json數組字元串
@RequestMapping("/resolveJsonArray" )
public void resolveJsonArray(HttpServletRequest request,HttpServletResponse response) throws IOException {
//解碼,為了解決中文亂碼
String str = URLDecoder.decode(request.getParameter("orderJson"),"UTF-8");
JSONObject jb=new JSONObject();
//將json格式的字元串轉換為json數組對象
JSONArray array=(JSONArray)jb.fromObject(str).get("menu");
//取得json數組中的第一個對象
JSONObject o = (JSONObject) array.get(0);//獲得第一個array結果
//取出json數組中第一個對象的「userName」屬性值
String name=o.get("userName").toString();//獲得屬性值
System.out.println(name);
}
//通過該函數返回json格式的數據,在前台通過JQuery進行解析
@RequestMapping("/resolveJson" )
public void resolveJson(HttpServletRequest request,HttpServletResponse response) throws IOException {
List m = (List) new ArrayList();
JSONArray jsons = new JSONArray();
for(int i=0;i<10;i++){
User user = new User();
user.setUserName("name_" + i);
m.add(user);
}
for(int j=0;j<m.size();j++){
JSONObject jsonObject = new JSONObject();
jsonObject.put("user", m.get(j));
jsons.add(jsonObject);
}
response.getWriter().print(jsons.toString()) ;
}
@RequestMapping("/toJson" )
public String toJson() {
return "/json";
}
}
json的作用並不僅僅
在於作為字元串在前後台進行傳遞,我們採用json傳遞數據的時候更主要的考慮到的是它的傳輸效率。當兩個系統需要進行數據交換的時候,如果傳遞的是經過
序列化的對象,效率是非常低的,如果傳遞的是存儲大量對象的數組的時候效率就更不敢想像了,這時如果通過將對象或數據轉換成json字元串進行傳遞,效率
就會提高很多。
⑥ SpringMVC中,如果想對所有表單提交的數據進行過濾/轉義,怎麼操作比較簡單
最好的辦法就是整個過濾器,然後獲取表單信息存入資料庫
⑦ springmvc返回json數據 如何在filter中獲取的返回參數
filter在你調用/noaccess介面之前執行了,當然沒有retMsg了
⑧ springmvc註解中的jsonview怎麼用
解決方案: 類似於之前寫的《擴展SpringMVC以支持更精準的數據綁定》,擴展spring的HandlerMethodArgumentResolver以支持自定義的數據綁定方式。 1、請下載附件的代碼,放到工程中; 2、在RequestMappingHandlerAdapter添加自定義HandlerMethodA
⑨ SpringMvc使用json失敗,求助
該註解使用在 類名,介面頭上
@JsonIgnoreProperties(value={"comid"}) //希望動態過濾掉的屬性
例
@JsonIgnoreProperties(value={"comid"})
public interface CompanyFilter{
}
@JsonIgnoreProperties(value={"comid"})
public class CompanyFilter{
}
該註解使用在get方法頭上
@JsonIgnore
例
@JsonIgnore
public Integer getPageSize(){
return Integer.valueOf(getRows()==null?"0":getRows().toString());
}
⑩ springmvc怎麼使用json數據
1、第一種方式是spring2時代的產物,也就是每個json視圖controller配置一個Jsoniew。 如: 或者 同樣要用jackson的jar包。 2、第二種使用JSON工具將對象序列化成json,常用工具Jackson,fastjson,gson。