gpt4 book ai didi

java - 通过将 @JsonProperty 值传递给对象映射器来标识属性

转载 作者:行者123 更新时间:2023-12-02 17:31:35 25 4
gpt4 key购买 nike

我正在使用 spring 和 hibernate。我有一个包含很多字符串成员变量的类 (DTO)。我正在尝试对此类进行搜索。用户应该能够按每个字段进行搜索。我正在使用 jackson json mapper 来序列化和反序列化对象。有没有办法通过使用 JsonProperty 值来识别 fieldName?

举个例子:我的 DTO

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

任何实现都可以。我正在寻找一种处理此类案件的好方法。感觉手动查找字段涉及“太多输入”。

最佳答案

你基本上想使用反射。在字段查找方面,这里有两种可能:

  • @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);

关于java - 通过将 @JsonProperty 值传递给对象映射器来标识属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32471775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com