作者: whooyun发表于: 2018-04-14 14:51
public class ResponseMsgBean {
private static final String RESULT = "result";
private static Gson gson = new Gson();
/**
* 错误码
*/
private String resultCode;
/**
* 错误信息
*/
private String resultMsg;
/**
* 业务数据
*/
private Object body;
public String getResultCode() {
return resultCode;
}
public void setResultCode(String resultCode) {
this.resultCode = resultCode;
}
public String getResultMsg() {
return resultMsg;
}
public void setResultMsg(String resultMsg) {
this.resultMsg = resultMsg;
}
public Object getBody() {
return body;
}
public void setBody(Object body) {
this.body = body;
}
public static void main(String[] args) {
System.out.println(ResponseMsgBean.getMsgJson("7001", "7001"));
}
public ResponseMsgBean(String resultCode, String resultMsg, Object body) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
if (StringUtils.isEmpty(body)) {
this.body = new Object();
} else {
this.body = body;
}
}
public ResponseMsgBean(String resultCode, String resultMsg) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
this.body = new Object();
}
/**
* 自定义信息code、信息msg、业务数据
*
* @param resultCode 消息代码
* @param resultMsg 消息内容
* @param body 业务数据(可选项,为空null)
* @return
*/
public static String getMsgJson(@NonNull String resultCode, @NonNull String resultMsg, Object body) {
ResponseMsgBean msgBean = new ResponseMsgBean(resultCode, resultMsg, body);
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
/**
* 自定义信息code、信息msg
* @param resultCode 消息代码
* @param resultMsg 消息内容
* @return
*/
public static String getMsgJson(@NonNull String resultCode, @NonNull String resultMsg) {
ResponseMsgBean msgBean = new ResponseMsgBean(resultCode, resultMsg);
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
/**
* 请求参数或格式错误
*
* @return
*/
public static String getMsgJsonParamError() {
ResponseMsgBean msgBean = new ResponseMsgBean(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMsg());
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
/**
* 操作成功返回业务数据
*
* @param body 业务数据
* @return
*/
public static String getMsgJsonWithData(@NonNull Object body) {
ResponseMsgBean msgBean = new ResponseMsgBean(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), body);
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
/**
* 系统异常
*
* @return
*/
public static String getMsgJsonWithSystemError() {
ResponseMsgBean msgBean = new ResponseMsgBean(ResultCode.FB_SYSTEM_ERROR.getCode(), ResultCode.FB_SYSTEM_ERROR.getMsg());
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
/**
* 操作成功(insert,update,delete)
*
* @return
*/
public static String getMsgJsonWithSuccess() {
ResponseMsgBean msgBean = new ResponseMsgBean(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg());
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
/**
* 查询成功未返回业务数据
*
* @return
*/
public static String getMsgJsonWithoutData() {
ResponseMsgBean msgBean = new ResponseMsgBean(ResultCode.NODATA.getCode(), ResultCode.NODATA.getMsg());
Map map = new HashMap(1);
map.put(RESULT, msgBean);
return gson.toJson(map);
}
}
我的json转换类
@Slf4j
public class WrapperJson {
ObjectMapper mapper;
public WrapperJson()
{
mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
/**
* 如果被转换对象是Object会提示
* Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
*/
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
public WrapperJson(JsonInclude.Include include)
{
mapper = new ObjectMapper();
mapper.setSerializationInclusion(include);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
/**
* 如果被转换对象是Object会提示
* Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
*/
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
public String toJson(Object object) throws JsonProcessingException {
return mapper.writeValueAsString(object);
}
public <T> T fromJson(String json, Class<T> cls) throws IOException {
return mapper.readValue(json, cls);
}
public <T> T fromJson(String json,TypeReference valueTypeRef) throws IOException {
return mapper.readValue(json, valueTypeRef);
}
}
转到jackson出现的异常
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
问题原因:
业务数据body是Object类型,其实有时候就是个空对象,所以是无法序列化,jackson 默认是对所有数据类型进行序列化。所以就只能自定义ObjectMapper,配置mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
注:看到网上有可以针对某个字段不做序列化的注解配置@JsonIgnore,但是不适合我的这种情况