当前位置: 首页 > 知识库问答 >
问题:

Jackson ObjectMapper readValue()解析到Object时无法识别的字段

唐珂
2023-03-14

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

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

下面的代码是对象,我想从Json响应绑定值

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

我一直在获得“无法识别的字段访问\u令牌”,但当我添加objectMapper时。配置(在未知属性上反序列化feature.FAIL,false) 则访问令牌将为空

        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)”更改字段,因为我认为变量名中的“\ux”符号存在问题。我加入了接球手和二传手。我使用的版本可能有问题,但我不这么认为,因为我使用的是“com.fasterxml.jackson.core”


共有2个答案

白萧迟
2023-03-14

您的setters与JSON键不匹配。

要正确阅读它,您应该将setters更改为:

setAccess_token()
setToken_type()
...

但老实说,这太丑陋了。

尝试遵循JavaBean名称约定,并使用@JsonProperty自定义JSON键:

public class Token {
        @JsonProperty("access_token")
        String accessToken;
         ....

}
梁丘赞
2023-03-14

您尝试了“@JsonProperty(accessToken)”。但是您的json包含access\u令牌。它是如何工作的?尝试使用此类:

public class Token {
    @JsonProperty("access_token")
    String accessToken;
    @JsonProperty("token_type")
    String tokenType;
    int expiresIn;
    String grantType;
    //getter setter
}
 类似资料:
  • 我有一个这样的字符串,当我试图解析它时,它出现在JSON < code > processing data call \ \ u 007 fabc computers 中,jackson抛出一个这样的异常: 我认为问题的发生是因为。它在UTF-8中绝对有意义。知道如何避免这个问题吗?执行在这里有什么帮助吗?

  • 问题内容: 我遇到反序列化问题: 这是我的课: 我要反序列化的JSON是: 我得到这个异常: 我不想添加: 因为我想得到ResObj … 如果我添加了注释,它将通过,但会将其设置为null ..这是我不想要的。 问题答案: 如果您不想在bean中使用设置器,而只使用字段和获取器,则可以使用ObjectMapper的可见性检查器来允许字段可见。像下面这样

  • 问题内容: 我使用杰克逊将JSON转换为Object类。 JSON: 对象类别: 码: 我的代码抛出这样的异常: 而且我不想在Test类上添加一个道具,我只是想让jackson转换Test中也存在的存在值。 问题答案: Jackson提供了几种不同的机制来配置“额外” JSON元素的处理。以下是将to 配置为not 的示例。 有关其他方法,请参见http://wiki.fasterxml.com/

  • 我有一个具有此结构的 xsd 文件: 所以,我已经用jaxb2生成了java类: Accesso 类和其他类也是如此。这是我尝试反序列化的xml文件的一个例子: 但是当我要反序列化某个xml文件时,我得到了这个错误: com.fasterxml.jackson.databind.exc.未识别的字段Accesso(类com.xx.yy.FlsProSoc),未标记为不可忽略(一个已知的属性:内容]

  • 我有一个thymeleaf表单和Spring引导后端。我有一个model类,它的getters和setters名称有点不同。因此,当我要取那个模型并将它的字段作为表单输入字段时,Tymeleaf不能将它们识别为字段。 窗体适用于区域字段。但对Amt字段不起作用。如果我将isAmt()get方法更改为getIsAmt(),也许我可以修复这个问题。但是我不能更改模态类的任何方法名,因为这个类已经编译好

  • 我正在将下面的sql查询转换为Snowflake,并得到错误“numeric Value”-“未识别”,但它没有行号。我假设它在整个查询中引用了各种“-1”实例,但没有引用任何行,所以不清楚是什么导致了这个问题。如果是对“-1”的各种引用--雪花中的替代方案是什么?Try_To_Number在这种情况下不起作用,所以希望社区有建议