【问题标题】:Edit field name in response body在响应正文中编辑字段名称
【发布时间】:2019-09-18 13:19:28
【问题描述】:

我通过 REST 请求从第三方 api 接收数据。

{"Category": {"Name":"name123", "Hint":"hint"},

... 但问题是字段名称以大写开头。

我认为一种解决方案可以是@JsonProperty("Category") 但这需要很多时间...

有很多关于这个问题的请求,这对我很有帮助。谢谢 ;)

【问题讨论】:

    标签: spring rest http interceptor body-parser


    【解决方案1】:

    您可以使用 Jackson 自定义 PropertyNamingStrategy:https://www.javacodegeeks.com/2013/04/how-to-use-propertynamingstrategy-in-jackson.html

    给出你想要建立这样一个策略的场景:

    import org.codehaus.jackson.map.MapperConfig;
    import org.codehaus.jackson.map.PropertyNamingStrategy;
    import org.codehaus.jackson.map.introspect.AnnotatedField;
    import org.codehaus.jackson.map.introspect.AnnotatedMethod;
    
    public class MyNameStrategy extends PropertyNamingStrategy
     {
      @Override
      public String nameForField(MapperConfig
                           config,
       AnnotatedField field, String defaultName) {
         return convert(defaultName);
    
      }
      @Override
      public String nameForGetterMethod(MapperConfig
                           config,
       AnnotatedMethod method, String defaultName) {
         return convert(defaultName);
      }
    
      @Override
      public String nameForSetterMethod(MapperConfig
                           config,
        AnnotatedMethod method, String defaultName) {
       String a = convert(defaultName); 
       return a;
      }
    
      public String convert(String defaultName )
      {
       char[] arr = defaultName.toCharArray();
       if(arr.length !=0)
       {
        if ( Character.isLowerCase(arr[0])){
         char upper = Character.toUpperCase(arr[0]);
         arr[0] = upper;
        }
       }
       return new StringBuilder().append(arr).toString();
      }
    
     }
    

    在你想要解析的 JSON 的类中,只需使用创建的策略:

    ObjectMapper mapper = new ObjectMapper();
    mapper.setPropertyNamingStrategy(new MyNameStrategy());
    

    【讨论】:

      【解决方案2】:

      我找到了解决方案。

      ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); QuestionnaireDto questionnaireDto = objectMapper.readValue(response.getBody().toString(), QuestionnaireDto.class);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多