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;
        }

Authclass中,我有五个变量,但我只想让它显示两个,分别是resp_coderesp_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 对象,则只需创建一个仅包含所需属性的其他私有对象。