简体   繁体   English

对象映射器给出异常:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段

[英]Object Mapper giving Exception: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field

I am consuming a spring boot application, On hitting the "/test/api" rest end point with a GET request from Postman, I am getting below error:我正在使用 Spring Boot 应用程序,在使用来自 Postman 的 GET 请求点击“/test/api”rest 端点时,出现以下错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "userName" (class com.example.MyPojo), not marked as ignorable (0 known properties: ]) com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“userName”(com.example.MyPojo 类),未标记为可忽略(0 个已知属性:])

The service I am trying to consume produces response in below format.我尝试使用的服务以以下格式生成响应。

@Getter
@Setter
public class MyResponse extends MyPojo {

    int responseCode;
    String responseMessage;
    List<MyPojo> output;
}
public class MyPojo{
}
public class User extends MyPojo {

    private String id;

    @NotBlank
    private String userName;

    private String companyId;
}

My Controller class looks like something below.我的 Controller 类如下所示。

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;

@RestController
@RequestMapping("/test")
public class SampleRestController {

    @GetMapping("/api")
    public MyResponse testApi(){

        RestTemplate restTemplate = new RestTemplate();
        String url="http://<Domain>:8085/users/active";
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<String> entity = new HttpEntity<String>("header",headers);
        final ResponseEntity<String> responseEntity = restTemplate.exchange( url, HttpMethod.GET, entity, String.class );

        MyResponse myResponse = null;
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility( PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
        mapper.enable( DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
        try {
            myResponse = mapper.readValue(responseEntity.getBody(), MyResponse.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return myResponse;
    }

}

Please point out my mistake, I am not able to figure it out.请指出我的错误,我无法弄清楚。 Any help will be appreciated.任何帮助将不胜感激。

To map user attribute you need to have UserResponse-要映射用户属性,您需要具有 UserResponse-

@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserResponse extends MyPojo {

    int responseCode;
    String responseMessage;
    List<User> output;
}

Similarly, for Product you'll need ProductResponse-同样,对于 Product,您需要 ProductResponse-

@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProductResponse extends MyPojo {

    int responseCode;
    String responseMessage;
    List<Product> output;
}

also, define @Getter and @Setter annotation if not using currently.另外,如果当前不使用,请定义 @Getter 和 @Setter 注释。

@Getter
@Setter
public class User extends MyPojo {

    private String id;

    @NotBlank
    private String userName;

    private String companyId;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段 - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field 解决com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段 - resolving com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“ g” - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “g” com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“消息”异常 - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “message” exception Jackson 反序列化错误:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别 - Jackson deserialization error: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 无法使用杰克逊,com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException将xml绑定到pojo:无法识别的字段 - can not bind xml to pojo using jackson, com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field 引起:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“Status” - Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “Status” Java - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“”不可标记 - Java - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "" not marked as ignorable com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“user_activity” - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "user_activity"
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM