今天在写程序的时候遇到了一个问题,问题不说太难,但是从问题的发现到解决,着实费了一些时间,今天我在这里写出来,希望我和大家再遇到这样的问题,都很快能解决,只这样的,我有两个程序,一个是用来给另外一个项目发送请求的项目A,另外一个是被调用者B,A接收不到B的响应,经查证,是由于A定义了一个实体类作为接收B中响应的参数,但A中实体类参数实体类为大写,而B中响应的参数解析为了首字母小写,那么我们直接看B中响应的实体类
package com.tp.heartbeat.ajax;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.tp.heartbeat.utils.LogUtils;
/**
* create by Liujishuai on 2015年9月21日
*/
//@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY,getterVisibility = JsonAutoDetect.Visibility.NONE)
public class AjaxResult {
/**
* 请求结果是否成功
*/
private String Code = "200";
/**
* 请求返回信息
*/
private String Message = "SUCCESS"
/**
* 请求结果
*/
private Object Data = null;
/**
* Instantiates a new Ajax result.
*/
private AjaxResult(){}
public String getCode() {
return Code;
}
public void setCode(String errorCode) {
Code = errorCode;
}
public String getMessage() {
return Message;
}
public void setMessage(String message) {
Message = message;
}
public Object getData() {
return Data;
}
public void setData(Object data) {
Data = data;
}
/**
* 获取正确结果模板
*
* @param message 请求返回信息
* @param obj 请求结果
* @return AjaxResult
*/
public static AjaxResult getOK(String message, Object obj){
AjaxResult result = new AjaxResult();
result.setMessage(message);
result.setData(obj);
return result;
}
/**
* 获取正确结果模板
*
* @return AjaxResult
*/
public static AjaxResult getOK(){
return getOK(ActionConstants.DEFAULT_SUCCESS_RETURNMSG,null);
}
}
也就是说,我们本来要求返回的为
{
"Message": "SUCCESS",
"Code": "200",
"Data": null
}
从实体类里面看,B中所给的返回的实体类也并没有出错,参数首字母是大写,但是控制层返回的响应参数确是小写的,也就是说,问题就在于,B中返回的json格式都把本应为大写的首字母变为了小写。我看网上的解决方法是在实体类的参数加上@JsonProperty像下面的这样
@JsonProperty
private String Code = "200";
但是我加上之后,返回的响应结果确是大小写的都给返回了,返回如下代码:
{
"Code": "200",
"Message": "SUCCESS",
"Data": null,
"message": "SUCCESS",
"data": null,
"code": "200"
}
那要怎么解决这种情况呢?
解决办法1
只在返回的实体类的get方法上添加@JsonProperty这个注解,例如
@JsonProperty("Code")
public String getCode() {
return Code;
}
这样响应的值就是首字母大写了
解决方法2
我们可以直接在要返回的实体类上加下面注解
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY,getterVisibility = JsonAutoDetect.Visibility.NONE)
这两种解决方法返回的都是首字母大写,都是将实体类的get方法设置为了不能自动识别
网友评论