创建于排球杰克逊解析请求 [英] Creating a Jackson parsed request in Volley
本文介绍了创建于排球杰克逊解析请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想创建一个排球执行JacksonJSONRequest。像极了我的请求/响应将有X类型的请求对象,而Y型的响应对象。
I want to create a JacksonJSONRequest implementation in Volley. My requests/responses like most will have a request object of type X, and a response object of type Y.
凌空请求基类既定义为同...
The Volley Request base class defines both as the same...
public class JacksonRequest<T> extends Request<T>
...
protected Response<T> parseNetworkResponse(NetworkResponse response)
这没有多大意义的我。使用相同结构的请求和响应,我不能想象许多休息的请求。
This doesn't make much sense to me. I can't imagine many REST requests using the same structure for request and responses.
我失去了一些东西明显在这里?
Am I missing something obvious here?
推荐答案
下面是我的实现......
Here is my implementation...
public class JacksonRequest<T> extends JsonRequest<T>
{
private Class<T> responseType;
/**
* Creates a new request.
*
* @param method
* the HTTP method to use
* @param url
* URL to fetch the JSON from
* @param requestData
* A {@link Object} to post and convert into json as the request. Null is allowed and indicates no parameters will be posted along with request.
* @param listener
* Listener to receive the JSON response
* @param errorListener
* Error listener, or null to ignore errors.
*/
public JacksonRequest(int method, String url, Object requestData, Class<T> responseType, Listener<T> listener, ErrorListener errorListener)
{
super(method, url, (requestData == null) ? null : Mapper.string(requestData), listener, errorListener);
this.responseType = responseType;
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response)
{
try
{
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
return Response.success(Mapper.objectOrThrow(jsonString, responseType), HttpHeaderParser.parseCacheHeaders(response));
}
catch (Exception e)
{
return Response.error(new ParseError(e));
}
}
}
映射器类,上述用途只是一个小包装类...
The Mapper class which the above uses is just a small wrapper class...
/**
* Singleton wrapper class which configures the Jackson JSON parser.
*/
public final class Mapper
{
private static ObjectMapper MAPPER;
public static ObjectMapper get()
{
if (MAPPER == null)
{
MAPPER = new ObjectMapper();
// This is useful for me in case I add new object properties on the server side which are not yet available on the client.
MAPPER.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
return MAPPER;
}
public static String string(Object data)
{
try
{
return get().writeValueAsString(data);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public static <T> T objectOrThrow(String data, Class<T> type) throws JsonParseException, JsonMappingException, IOException
{
return get().readValue(data, type);
}
public static <T> T object(String data, Class<T> type)
{
try
{
return objectOrThrow(data, type);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
}
这篇关于创建于排球杰克逊解析请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文