[java rest]rest请求
- 01.说明
- 02.前端AJAX优化
- 03.后台的优化
- 04.数据的处理
01.说明
本系列是对 阿发你好 JAVA教程做的个人笔记总结,如果小伙伴们有兴趣,请移步至阿发你好官网JAVA教程,保姆级视频教学,您值得拥有
02.前端AJAX优化
前端AJAX执行rest请求,代码如下:
$.ajax({
method: 'POST' ,
url: 'Handler1',
contentType: 'application/json' ,
data : JSON.stringify(req) ,
processData : false,
success : function( ret ){
console.log( ret );
if(ret.error == 0) alert('OK')
}
})
我们不难发现,其中有固定的套路与格式,那么我们能不能将AJAX进行代码优化呢?
阿发老师提供了afquery.js
var Af = {}
Af.rest = function(url, data, success, error){
if(data == null) data = {};
$.ajax({
method: 'POST' ,
url: url ,
contentType: 'application/json' ,
data : JSON.stringify(data) ,
processData : false,
dataType: 'json',
success : success ,
error : error ,
})
}
这样我们只需要简单的调用方法,填入参数就可以实现rest请求
Af.rest('Handler6', app.form, function(ret){
if(ret.error== 0){
alert( ret.data)
}
})
03.后台的优化
package my;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import my.util.FastJSON;
import my.util.WebUtil;
@WebServlet("/Handler4")
public class Handler4 extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
JSONObject json = null;
try{
String requestBody = WebUtil.requestBody(req, "UTF-8");
json = JSON.parseObject(requestBody);
} catch (Exception e)
{
json = new JSONObject();
}
JSONObject result = new JSONObject(true);
result.put("error", 0);
result.put("reason", "OK");
try
{
Object data = this.handle(req, resp, json);
if (data != null)
{
if (data instanceof JSON)
result.put("data", data);
else
result.put("data", JSON.toJSON(data));
}
} catch (Exception e)
{
String reason = e.getMessage();
if (reason == null)
reason = e.getClass().getName();
result.put("error", -1);
result.put("reason", e.getMessage());
}
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json");
resp.getWriter().write(FastJSON.niceFormat( result ));
}
public Object handle(HttpServletRequest request
, HttpServletResponse response
, JSONObject json)throws Exception
{
return "已成功处理";
}
}
后台的代码也是具有套路和固定格式的,我们只需要在handle
方法里做对应的处理就可以了,那么我们就可以使用抽象类的方法实现:
package my;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import my.util.FastJSON;
import my.util.WebUtil;
public abstract class RestServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
JSONObject json = null;
try{
String requestBody = WebUtil.requestBody(req, "UTF-8");
json = JSON.parseObject(requestBody);
} catch (Exception e)
{
json = new JSONObject();
}
JSONObject result = new JSONObject(true);
result.put("error", 0);
result.put("reason", "OK");
try
{
Object data = this.handle(req, resp, json);
if (data != null)
{
if (data instanceof JSON)
result.put("data", data);
else
result.put("data", JSON.toJSON(data));
}
} catch (Exception e)
{
String reason = e.getMessage();
if (reason == null)
reason = e.getClass().getName();
result.put("error", -1);
result.put("reason", e.getMessage());
}
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json");
resp.getWriter().write(FastJSON.niceFormat( result ));
}
protected abstract Object handle(HttpServletRequest request
, HttpServletResponse response
, JSONObject json)throws Exception;
}
然后在实际使用的时候,继承抽象类,实现handle
方法即可:
package my;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import my.util.FastJSON;
@WebServlet("/Handler4")
public class Handler6 extends RestServlet
{
@Override
protected Object handle(HttpServletRequest request, HttpServletResponse response, JSONObject json) throws Exception
{
System.out.println("收到请求: " + FastJSON.niceFormat(json));
return "已经保存数据";
}
}
04.数据的处理
在前面代码中使用的数据处理方法.仅供参考
package my.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
public class WebUtil
{
public static String requestBody(HttpServletRequest req, String charset) throws IOException
{
ByteArrayOutputStream result = new ByteArrayOutputStream(1024*16);
InputStream inputStream = req.getInputStream();
byte[] data = new byte[1024];
while (true)
{
int n = inputStream.read(data);
if(n <= 0) break;
result.write(data, 0, n);
if(result.size() > 1024*1024)
break;
}
return result.toString(charset);
}
public static int paramInt(HttpServletRequest req, String key, int defValue)
{
String str = req.getParameter(key);
if(str == null || str.length()==0)
return defValue;
try {
return Integer.valueOf(str);
}catch(Exception e) {
return defValue;
}
}
public static long paramLong(HttpServletRequest req, String key, long defValue)
{
String str = req.getParameter(key);
if(str == null || str.length()==0)
return defValue;
try {
return Long.valueOf(str);
}catch(Exception e) {
return defValue;
}
}
public static boolean paramBoolean(HttpServletRequest req, String key, boolean defValue)
{
String str = req.getParameter(key);
if(str == null || str.length()==0)
return defValue;
try {
return Boolean.valueOf(str);
}catch(Exception e) {
return defValue;
}
}
public static String paramString(HttpServletRequest req, String key, String defValue)
{
String str = req.getParameter(key);
if(str == null || str.length()==0)
return defValue;
return str;
}
}
package my.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class FastJSON
{
public static String niceFormat(Object j)
{
return JSON.toJSONString(j, SerializerFeature.PrettyFormat);
}
public static int intValue(JSONObject j, String key, int defValue)
{
try {
return j.getIntValue(key);
}catch(Exception e) {
return defValue;
}
}
public static long longValue(JSONObject j, String key, long defValue)
{
try {
return j.getLongValue(key);
}catch(Exception e) {
return defValue;
}
}
public static boolean booleanValue(JSONObject j, String key, boolean defValue)
{
try {
return j.getBooleanValue(key);
}catch(Exception e) {
return defValue;
}
}
public static String stringValue(JSONObject j, String key, String defValue)
{
try {
return j.getString(key);
}catch(Exception e) {
return defValue;
}
}
public static double doubleValue(JSONObject j, String key, double defValue)
{
try {
return j.getDoubleValue(key);
}catch(Exception e) {
return defValue;
}
}
public static float floatValue(JSONObject j, String key, float defValue)
{
try {
return j.getFloatValue(key);
}catch(Exception e) {
return defValue;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)