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

通过向对象映射器传递@JSONProperty值来标识属性

江睿
2023-03-14
public class SampleDTO{
  private String field1;
  private String field2;
  private String field3;
  private String field4;
  @JsonProperty("FIELD_1")
  public String getField1(){
    return field1;
  }
  @JsonProperty("FIELD_2")
  public String getField2(){
    return field2;
  }
  @JsonProperty("FIELD_3")
  public String getField3(){
    return field3;
  }
  @JsonProperty("FIELD_4")
  public String getField4(){
    return field4;
  }
}
public Set<T> search(String fieldName, String searchKeyword) {
   String originalFieldName = someMagicFunction(fieldName);
   //if fieldName= "FIELD_1", someMagicFunction should return "field1"
   Criteria criteria = session.createCriteria(T.class);
   criteria.add(Restrictions.eq(originalFieldName, searchKeyword));
   return new HashSet<T>(criteria.list());
} 

任何实现都没问题。我正在寻找一个处理这种案件的好方法。感觉手动查找字段涉及“太多的键入”。

共有1个答案

越骏俊
2023-03-14

您基本上想使用反射。当涉及到字段查找时,这里有两种可能性:

    @JSONProperty注释的
  • 字段的真实名称

在第一种情况下,您可能希望使用一些额外的库来减轻使用反射+注释时的痛苦,但粗略的代码看起来不像下面这样:

    SampleDTO dto = new SampleDTO();
    // setup some values here

    Field[] fields = r.getClass().getFields();

    for(Field f : fields) {
        JsonProperty jsonProperty = f.getDeclaredAnnotation(JsonProperty.class);

        if (jsonProperty != null && jsonProperty.value().equals("FIELD_1")) {
            return (String) f.get(dto);
        }

        // throw exception since passed field name is illegal
     }        
    SampleDTO dto = new SampleDTO();
    // setup some values here

    String field1Value = (String) r.getClass().getField("field1").get(dto);
 类似资料:
  • 我有以下数据结构来我的服务器通过Http调用 然后我有下面的实体类 不管怎样,我都无法让spring boot匹配json属性文本(这两个值总是空的)。。。这可行吗 我需要生成的最终JSON如下 所以基本上我需要把我的孩子信息附加到父母身上。 更新我能够通过使用自定义JsonDeserializer获得与父级相同的一个属性,如下所示 这只适用于一个属性集,每个类使用@JsonDeserialize

  • 我正在从React中的外部api接收数据 我有一个目标 我试图通过它进行映射,以便能够渲染数据,即它在屏幕上显示的“bitfinex:1.2、blockfi:2.3等” 但是我得到了一个错误,说它不是一个函数。 我做错了什么?

  • 问题内容: 我正在考虑我的应用程序的解决方案。这是一种情况:我有一个类,该类的方法将ObjectA作为输入参数并调用几个小方法,这些方法中的每个方法都需要ObjectA的某些部分(它们不重叠,即需求和,需求等等)。 …)现在的问题是:鉴于一般的良好代码实践和性能,将ObjectA传递给这些方法中的每一个方法更好,以便它们可以自己提取所需的值,还是仅传递它们的值更好?我的意思是: 要么 感谢您的任何

  • 我有一个对象,我正试图映射到。现在这个有一个名为的枚举,其中包含一些值。我想使用将它们映射到中的其他枚举值。以下是我到目前为止的代码: 当我尝试编译它时,我得到了错误:

  • 我希望在我的dao对象中有这样的方法 但我得到了错误 错误:不确定如何将游标转换为此方法的返回类型public abstract java。util。地图 是否可以将其更改为工作版本? 因此,返回的类型可能不同,但主要条件是 数据库中只能有一个查询 我希望避免额外的代码,比如只为这个方法创建额外的数据结构

  • 问题内容: 是否可以通过Java通过引用传递对象 就像在C#中一样 问题答案: 不,这在Java中是不可能的。 在Java中,方法的所有参数均按值传递。注意非原始型的的变量,它们是对对象的引用,也由值来传递:在这种情况下, 参考 是 由值来传递 。请注意,按值传递引用与按引用传递不同。