在Java中将对象返回为Json

时间:2018-08-09 15:40:07

标签: java json objectmapper mapper

我们想将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_coderesp_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后,签名变为空

2 个答案:

答案 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对象,则只需创建另一个仅包含必需属性的私有对象即可。