我们想将Object类作为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
类中,我有五个变量,但是我只希望它显示两个变量,分别是resp_code
和resp_desc
。但是上面的代码总是返回5个变量。
修改
这就是我们的代码应该如何工作的。首先,它将jsonString转换为名为Auth的对象类。然后它将执行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
后,签名变为空
答案 0 :(得分:1)
如果您使用的是Jackson 1.9以下版本
Add @IgnoreJson annotation on Getter method
如果您使用的是杰克逊的较新版本
@JsonProperty(access = Access.WRITE_ONLY)
private String password;
答案 1 :(得分:1)
如果Auth对象中的所有其他属性都为null,那么这可能会有所帮助:
mapper.setSerializationInclusion(Include.NON_NULL);
如果其他属性(或其中一些属性)是基元,则必须使用
对其进行注释@JsonIgnore
注释。
或者...如果您不能更改/编辑Auth对象,则只需创建另一个仅包含必需属性的私有对象即可。