为了账号安全,请及时绑定邮箱和手机立即绑定

Jackson ObjectMapper readValue() 解析为 Object

Jackson ObjectMapper readValue() 解析为 Object

阿波罗的战车 2021-07-06 13:25:07
我正在 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"
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您的设置器与 JSON 键不匹配。


要正确阅读它,您应该将设置器更改为:


setAccess_token()

setToken_type()

...

但老实说,这太丑了。


尝试遵循 Java bean 名称约定并使用以下命令自定义 JSON 密钥@JsonProperty:


public class Token {

        @JsonProperty("access_token")

        String accessToken;

         ....


}


查看完整回答
反对 回复 2021-07-14
?
月关宝盒

TA贡献1772条经验 获得超5个赞

您尝试使用"@JsonProperty(accessToken)". 但是您的 json 包含access_token. 这个怎么运作?试试这个类:


public class Token {

    @JsonProperty("access_token")

    String accessToken;

    @JsonProperty("token_type")

    String tokenType;

    int expiresIn;

    String grantType;

    //getter setter

}


查看完整回答
反对 回复 2021-07-14
  • 2 回答
  • 0 关注
  • 303 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信