Rag*_*oor 1 java spring json hibernate jackson
我正在使用弹簧和休眠。我有一个包含很多字符串成员变量的类(DTO)。我正在尝试实现对此类的搜索。用户应该能够按每个字段进行搜索。我正在使用 jackson json 映射器来序列化和反序列化对象。无论如何可以通过使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
让它成为我的搜索功能
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());
}
Run Code Online (Sandbox Code Playgroud)
任何实现都很好。我正在寻找一种处理此类案件的好方法。感觉就像手动查找字段涉及“打字太多”。
你基本上想使用反射。当涉及到字段查找时,这里有两种可能性:
在第一种情况下,您可能希望使用一些额外的库来减轻使用反射 + 注释时的痛苦,但是粗略的代码看起来更不像这样:
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
}
Run Code Online (Sandbox Code Playgroud)
在第二个中,它会容易得多:
SampleDTO dto = new SampleDTO();
// setup some values here
String field1Value = (String) r.getClass().getField("field1").get(dto);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6851 次 |
| 最近记录: |