Jackson ObjectMapper readValue() 解析为 Object

我正在 Java/Spring 中创建简单的休息客户端。我的请求已被远程服务正确使用,我得到了响应字符串:


{"access_token":"d1c9ae1b-bf21-4b87-89be-262f6","token_type":"bearer","expires_in":43199,"grant_type":"client_credentials"}

下面的代码是我想从 Json Response 绑定值的对象


package Zadanie2.Zadanie2;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import com.fasterxml.jackson.annotation.JsonProperty;


 public class Token {

String access_token;        

String token_type;

int expiresIn;

String grantType;

//////////////////////////////////////////////////////

public Token() {

    /////////////////////////////////

}

/////////////////////////////////////////////////////


public void setAccessToken(String access_token) {

    this.access_token=access_token;

}

public String getAccessToken() {

    return access_token;

}

////////////////////////////////////////////////

public void setTokenType(String token_type) {

    this.token_type=token_type;

}

public String getTokenType() {

    return token_type;

}

//////////////////////////////////////////////////////

public void setExpiresIn(int expiresIn) {

    this.expiresIn=expiresIn;

}

public int getExpiresIn() {

    return expiresIn;

}

//////////////////////////////////////////////////////////

public void setGrantType(String grantType) {

    this.grantType=grantType;

}

public String getGrantType() {

    return grantType;

}

}

我一直收到“无法识别的字段 access_token”,但是当我添加时,objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); access_token 将为空


        jsonAnswer=template.postForObject(baseUriAuthorize, requestEntity,  String.class);  

        System.out.println(jsonAnswer);

        Token token=objectMapper.readValue(jsonAnswer, Token.class);

        System.out.println(token.getAccessToken());

我尝试使用@JsonProperty注释。例如,我尝试更改字段,"@JsonProperty(accessToken)"因为我认为变量名称中的“_”符号存在问题。我添加了 getter 和 setter。也许我使用的版本有问题,但我不这么认为,因为我正在使用"com.fasterxml.jackson.core"


阿波罗的战车
浏览 304回答 2
2回答

Qyouu

您的设置器与 JSON 键不匹配。要正确阅读它,您应该将设置器更改为:setAccess_token()setToken_type()...但老实说,这太丑了。尝试遵循 Java bean 名称约定并使用以下命令自定义 JSON 密钥@JsonProperty:public class Token {        @JsonProperty("access_token")        String accessToken;         ....}

月关宝盒

您尝试使用"@JsonProperty(accessToken)". 但是您的 json 包含access_token. 这个怎么运作?试试这个类:public class Token {    @JsonProperty("access_token")    String accessToken;    @JsonProperty("token_type")    String tokenType;    int expiresIn;    String grantType;    //getter setter}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java