【问题标题】:JSON Key case sensitivity issue while unmarshalling to POJO解组到 POJO 时出现 JSON 密钥区分大小写问题
【发布时间】:2016-09-02 04:45:43
【问题描述】:

我开发了一个使用并返回 JSON 的 Java RESTful POST 服务。有一个 .NET 使用者从我提供的 xsd 生成 CS 类。由于 .NET 变量命名与 Java 不同,因此输入请求 JSON 中的键与预期的 JSON 不同。示例: { "userDetail" : "sairam" } 是预期的,但我们得到的是 { "UserDetail" : "sairam" }。

因此,特定的输入 JSON 无法解组到 POJO。我明白我可以像这样配置 ObjectMapper:

ObjectMapper objectMapper = new ObjectMapper();  
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);  
CarInfo info = objectMapper.readValue(data, CarInfo.class);

但是来自我的服务的请求在内部被注释 @Consumes({MediaType.APPLICATION_JSON}) 注释解组。请帮助解决这个问题的理想方法是什么?如何在注释级别忽略键的大小写?

提前致谢!!

编辑:@JavaNaming 注解可以与 PropertyNamingStrategy.PascalCaseStrategy.class 值一起使用。但我仍然得到:“UnrecognizedPropertyException:无法识别的字段“UserDetail”” 不确定我需要在哪里添加此注释以及我在这里缺少什么

【问题讨论】:

    标签: java c# json web-services rest


    【解决方案1】:

    您可以通过 MessageBodyReader 接口提供自己到自定义类型的映射来实现它。这基本上允许您轻松扩展 JAXRS 运行时以支持您自己的自定义实体提供程序。 以下是基于您的场景的粗略示例。

    @Provider
    @Consumes({MediaType.APPLICATION_JSON})
    public class CarInfoReader implements MessageBodyReader<CarInfo> {
        //. . .
    
        @Override
        public CarInfo readFrom(Class<CarInfo> type, Type genericType,
                Annotation[] annotations, MediaType mediaType,
                MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
                throws IOException, WebApplicationException {
            ObjectMapper objectMapper = new ObjectMapper();  
            objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);  
            CarInfo info = objectMapper.readValue(entityStream, CarInfo.class);
            return info;
        }
    
    }
    

    【讨论】:

    • 你能把你提到的所有预定义类的包详细信息发给我吗?
    • 你说的是MessageBodyReader等相关的类吗,都是jax-rs api核心类,比如javax.ws.rs.ext.MessageBodyReader。将 jaxrs-api 和 jackson 作为依赖项添加到您的 maven 文件中。
    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2017-04-04
    • 2017-03-10
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    相关资源
    最近更新 更多