在java中以Json形式返回对象
我们希望以JSON字符串的形式返回对象类在java中以Json形式返回对象,java,json,objectmapper,mapper,Java,Json,Objectmapper,Mapper,我们希望以JSON字符串的形式返回对象类 public static String genJson(Response r, Auth auth) { Auth p = new Auth(); ObjectMapper mapper = new ObjectMapper(); String transactionResult = r.getTransactionResult(); if (trans
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\u code
和resp\u 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;
}
Auth
@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对象中的所有其他属性都为null,则这可能会有帮助:
mapper.setSerializationInclusion(Include.NON_NULL);
如果其他属性(或其中一些)是基本属性,则必须使用
@JsonIgnore
注释
或者。。。如果无法更改/编辑Auth对象,则只需创建另一个仅包含所需属性的私有对象。映射程序如何知道哪些属性需要编码,哪些属性不需要编码?是否有方法让映射程序知道应该创建哪些属性?您使用什么库创建json?有些人使用
@transient
注释来知道应该忽略哪个变量。我假设您使用的是Jackson:yes,您可以使用@JsonProperty(access=access.WRITE_ONLY)私有字符串密码代码>这适用于所有其他三个字段似乎对传入消息和传出消息使用相同的Auth对象,但是某些属性仅在请求中使用,而其他属性仅在响应中使用。使用@JsonProperty(access=access.WRITE_ONLY)和@JsonProperty(access=access.WRITE_READ)注释。或者创建两个单独的对象:AuthIn和AuthOut,每个对象仅具有所需的属性。我更喜欢后一种解决方案,它更清晰。