如何使用fasterxml.jackson从json api响应中提取特定字段值
我的其中一个api回应如下:如何使用fasterxml.jackson从json api响应中提取特定字段值,json,jackson,gson,fasterxml,Json,Jackson,Gson,Fasterxml,我的其中一个api回应如下: { "statusCode": 422, "error": "Unprocessable Entity", "message": "Bad data received", "err_data": { "email": { "location": "body", "param": "email", "value": false, "msg":
{
"statusCode": 422,
"error": "Unprocessable Entity",
"message": "Bad data received",
"err_data": {
"email": {
"location": "body",
"param": "email",
"value": false,
"msg": "Please provide valid e-mail address"
}
}
}
因此,在下面的response.asString()
中表示上面的响应主体
ApiResponse response = new Gson().fromJson(response.asString(), ApiResponse.class);
ApiResponse.class
是我的模型,如下所示:
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "statusCode", "message" })
public class ApiResponse implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("message")
private String message;
@JsonProperty("statusCode")
private int statusCode;
@JsonProperty("err_data")
private List<String> errData = new ArrayList<>();
@JsonProperty("email")
private List<String> email = new ArrayList<>();
@JsonProperty("msg")
private String msg;
/**
* No args constructor for use in serialization
*/
public ApiResponse() {
}
/**
* @param message
*/
public ApiResponse(int statusCode, String message, List<String> errData, List<String> email, String msg) {
this.message = message;
this.statusCode = statusCode;
this.errData = errData;
this.email = email;
this.msg = msg;
}
@JsonProperty("statusCode")
public int getStatusCode() {
return statusCode;
}
@JsonProperty("statusCode")
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
@JsonProperty("message")
public String getMessage() {
return message;
}
@JsonProperty("message")
public void setMessage(String message) {
this.message = message;
}
@JsonProperty("err_data")
public List<String> getErrData() {
return errData;
}
@JsonProperty("err_data")
public void setErrData(List<String> errData) {
this.errData = errData;
}
@JsonProperty("email")
public List<String> getEmail() {
return email;
}
@JsonProperty("email")
public void setEmail(List<String> email) {
this.email = email;
}
@JsonProperty("msg")
public String getMsg() {
return msg;
}
@JsonProperty("msg")
public void setMsg(String msg) {
this.msg = msg;
}
}
我不熟悉fasterxml.jackson
lib,不知道我缺少了什么
要获得
msg
值,我必须在上面的模型类中进行哪些更改。非常感谢您。这就是您的代码不正确的地方:
@JsonProperty("err_data")
private List<String> errData = new ArrayList<>();
@JsonProperty("email")
private List<String> email = new ArrayList<>();
及
然后使用新类作为对象类型
@JsonProperty("err_data")
private ErrData errData;
// email is already inside ErrData, you don't need to define them here
最后,要访问您的msg
:
errData.getEmail().getMsg();
希望这足够清楚。祝你好运 这就是您的代码不正确的地方:
@JsonProperty("err_data")
private List<String> errData = new ArrayList<>();
@JsonProperty("email")
private List<String> email = new ArrayList<>();
及
然后使用新类作为对象类型
@JsonProperty("err_data")
private ErrData errData;
// email is already inside ErrData, you don't need to define them here
最后,要访问您的msg
:
errData.getEmail().getMsg();
希望这足够清楚。祝你好运 谢谢你的快速回复!我按照你们的建议做了,然后这样做是为了访问消息,但得到了空指针<代码>ApiResponse ApiResponse=new Gson().fromJson(response.asString(),ApiResponse.class);System.out.println(apiResponse.getErrData().getEmail().getMsg())您是否将@json属性添加到电子邮件字段?您还应该在其他类上定义它们:DI现在就知道了。。字段名不同。。我不得不重新命名getter方法名-
@JsonProperty(“err_data”)public ErrData getErr_data(){return err_data;}
现在工作正常<代码>System.out.println(apiResponse.getErr_data().getEmail().getMsg())代码>感谢您的快速回复!我按照你们的建议做了,然后这样做是为了访问消息,但得到了空指针<代码>ApiResponse ApiResponse=new Gson().fromJson(response.asString(),ApiResponse.class);System.out.println(apiResponse.getErrData().getEmail().getMsg())您是否将@json属性添加到电子邮件字段?您还应该在其他类上定义它们:DI现在就知道了。。字段名不同。。我不得不重新命名getter方法名-@JsonProperty(“err_data”)public ErrData getErr_data(){return err_data;}
现在工作正常<代码>System.out.println(apiResponse.getErr_data().getEmail().getMsg())代码>