【发布时间】:2018-08-09 15:40:06
【问题描述】:
我们希望将 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后,签名变为空
【问题讨论】:
-
映射器应该如何知道哪些属性要编码,哪些不应该编码?
-
有没有办法让映射器知道应该制作哪些属性?
-
您使用什么库来创建 json?有些人使用
@transientannotation 来知道应该忽略哪个变量 -
我假设您使用的是 Jackson:baeldung.com/jackson-ignore-properties-on-serialization
-
是的,您可以将
@JsonProperty(access = Access.WRITE_ONLY) private String password;用于所有其他三个字段
标签: java json objectmapper mapper