Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中以Json形式返回对象_Java_Json_Objectmapper_Mapper - Fatal编程技术网

在java中以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

我们希望以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\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,每个对象仅具有所需的属性。我更喜欢后一种解决方案,它更清晰。