Return 对象作为 Json 在 java
Return object as Json in java
我们想return对象class作为JSON字符串
public static String genJson(Response r, Auth auth) {
Auth p = new Auth();
ObjectMapper mapper = new ObjectMapper();
String transactionResult = r.getTransactionResult();
if (transactionResult.equalsIgnoreCase("APPROVED")) {
p.setPay_resp_resp_code("00");
p.setPay_resp_desc("Waiting");
try {
jsonStr = mapper.writeValueAsString(p);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return jsonStr;
}
在Auth
class中,我有五个变量,但我只想让它显示两个,分别是resp_code
和resp_desc
。但是上面的代码总是return 5个变量。
编辑
我们的代码应该是这样工作的。首先,它会将 jsonString 转换为名为 Auth 的对象 class。然后它将执行 if 语句。
@RequestMapping("/authstep")
@ResponseBody
private String AuthRequest(@RequestBody String jsonString) {
log.info("========== Receive JSON object request ==========");
if (jsonString != null) {
Auth auth = new Auth();
ObjectMapper mapper = new ObjectMapper();
try {
auth = mapper.readValue(jsonString, Auth.class);
} catch (JsonGenerationException jge) {
jge.printStackTrace();
} catch (JsonMappingException jme) {
jme.printStackTrace();
} catch (JsonParseException jpe) {
jpe.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
}
if (auth.getSignature().equals(signature)) {
Response response =xxx.getStep(auth);
return Util.genJson(response, auth);
}
}
return null;
}
授权
@Data
public class Auth {
@JsonIgnore
private String cipher;
@JsonIgnore
private String month;
@JsonIgnore
private String signature;
// need to return these two as json
private String pay_resp_resp_code;
private String pay_resp_desc;
}
添加@JsonIgnore
后,签名变为空
如果您使用的jackson 1.9以下版本
Add @IgnoreJson annotation on Getter method
如果您使用的是较新版本的 jackson
@JsonProperty(access = Access.WRITE_ONLY)
private String password;
如果 Auth 对象中的所有其他属性都为空,那么这可能会有所帮助:
mapper.setSerializationInclusion(Include.NON_NULL);
如果其他属性(或其中某些属性)是原语,则必须使用
对它们进行注释
@JsonIgnore
注释。
或者...如果您不能 change/edit Auth 对象,则只需创建一个仅包含所需属性的其他私有对象。
我们想return对象class作为JSON字符串
public static String genJson(Response r, Auth auth) {
Auth p = new Auth();
ObjectMapper mapper = new ObjectMapper();
String transactionResult = r.getTransactionResult();
if (transactionResult.equalsIgnoreCase("APPROVED")) {
p.setPay_resp_resp_code("00");
p.setPay_resp_desc("Waiting");
try {
jsonStr = mapper.writeValueAsString(p);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return jsonStr;
}
在Auth
class中,我有五个变量,但我只想让它显示两个,分别是resp_code
和resp_desc
。但是上面的代码总是return 5个变量。
编辑
我们的代码应该是这样工作的。首先,它会将 jsonString 转换为名为 Auth 的对象 class。然后它将执行 if 语句。
@RequestMapping("/authstep")
@ResponseBody
private String AuthRequest(@RequestBody String jsonString) {
log.info("========== Receive JSON object request ==========");
if (jsonString != null) {
Auth auth = new Auth();
ObjectMapper mapper = new ObjectMapper();
try {
auth = mapper.readValue(jsonString, Auth.class);
} catch (JsonGenerationException jge) {
jge.printStackTrace();
} catch (JsonMappingException jme) {
jme.printStackTrace();
} catch (JsonParseException jpe) {
jpe.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
}
if (auth.getSignature().equals(signature)) {
Response response =xxx.getStep(auth);
return Util.genJson(response, auth);
}
}
return null;
}
授权
@Data
public class Auth {
@JsonIgnore
private String cipher;
@JsonIgnore
private String month;
@JsonIgnore
private String signature;
// need to return these two as json
private String pay_resp_resp_code;
private String pay_resp_desc;
}
添加@JsonIgnore
后,签名变为空
如果您使用的jackson 1.9以下版本
Add @IgnoreJson annotation on Getter method
如果您使用的是较新版本的 jackson
@JsonProperty(access = Access.WRITE_ONLY)
private String password;
如果 Auth 对象中的所有其他属性都为空,那么这可能会有所帮助:
mapper.setSerializationInclusion(Include.NON_NULL);
如果其他属性(或其中某些属性)是原语,则必须使用
对它们进行注释@JsonIgnore
注释。
或者...如果您不能 change/edit Auth 对象,则只需创建一个仅包含所需属性的其他私有对象。