记录贴
环境:JavaSelvert后台获取前端json
使用库: com.alibaba.fastjson.JSONObject
在使用JavaSelvert后台获取从前端js传来的json串时报错com.alibaba.fastjson.JSONObject cannot be cast to xxx,看了其他一些大佬的博客,找到了解决方案。
首先从json格式入手
//如果json格式是这种的就会报上面的错误,无法将传过来的json转化成json对象,
{
"insertUserList": [
{
"firstName": "Brett",
"lastName": "McLaughlin",
"email": "aaaa"
},
{
"firstName": "Jason",
"lastName": "Hunter",
"email": "bbbb"
},
{
"firstName": "Elliotte",
"lastName": "Harold",
"email": "cccc"
}
]
}
//如果是这样的json块就不会报错
{
"firstName": "Jason",
"lastName": "Hunter",
"email": "bbbb"
}
初步猜测,是因为前者的json数据是一组数据,而后者是一个json数据,也就是说Java后台如果接受到的是一组数据则需要先将一组数据(List)中的每一项提取出来才可以转化为json对象,所以就有了两种解决办法
第一种解决办法:
json 串可以分组发送每次只发生一个json串如上面的第一个json例子。
第二种解决办法
将从request中获取的json组先转化成List然后从List中获取单个json串转化成json对象
下面贴出第一种方法的Util类:
package content.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSONObject;
public class JSONUtil {
/**
* 调用方法,转化成JSONObject对象
* @param request
* @return
*/
public static JSONObject getRequestJsonObject(HttpServletRequest request){
String json = getRequestJsonString(request);
return JSONObject.parseObject(json);
}
/**
* 从request中获取字节流
* @param request
* @return
*/
public static byte[] getRequestPostBytes(HttpServletRequest request ){
int contentLength = request.getContentLength();
if(contentLength < 0){
return null;
}
byte buffer[] = new byte[contentLength];
for(int i = 0 ; i < contentLength;){
int readLen = -1;
try {
readLen = request.getInputStream().read(buffer,i,contentLength - 1);
} catch (IOException e) {
e.printStackTrace();
}
if(readLen == -1){
break;
}
i += readLen;
}
return buffer;
}
/**
* 将request中的字节流按照指定编码(uft8)转换成字符串
* @param request
* @return
*/
public static String getRequestPostStr(HttpServletRequest request){
byte buffer[] = getRequestPostBytes(request);
String charEncoding = request.getCharacterEncoding();
if(charEncoding == null){
charEncoding = "UTF-8";
}
try {
return new String(buffer,charEncoding);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* 通过调用形式获取Json字符串
* @param request
* @return
*/
public static String getRequestJsonString(HttpServletRequest request){
String submitMethod = request.getMethod();
if(submitMethod.equals("GET")){
try {
return new String(request.getQueryString().getBytes("iso-8859-1"),"utf-8").replaceAll("%22", "\"");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}else{
return getRequestPostStr(request);
}
return null;
}
}