我必須將傳入的參數值轉換爲需要的格式的Repository接口,是否可以這樣做。我的域類,如何在Spring Data Rest中格式化@param字符串
@DynamoDBTable(tableName = "test")
public class Test implements Serializable{
@Id
private String id;
private String name;
private String date;
@DynamoDBHashKey(attributeName = "id")
@DynamoDBAutoGeneratedKey
public String getId() {
return id;
}
@DynamoDBAttribute(attributeName = "name")
public String getName() {
return name;
}
@DynamoDBAttribute(attributeName = "date")
@JsonSerialize(using = StringDateSerializer.class)
public String getDate() {
return date;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@JsonDeserialize(using = StringDateDeserializer.class)
public void setDate(String date) {
this.date = date;
}
}
我的倉庫接口,
@EnableScan
@RestResource(path="test", rel="test")
public interface TestRepository extends PagingAndSortingRepository<Test, String>{
@RestResource(path="testsearch", rel="test")
public Page<Test> findByNameAndDateLessThan(@Param("name") String name, @Param("date") String date, Pageable pageable);
}
這裏我使用的getTime的Java()方法將傳入的日期字符串轉換爲時間。是否有可能在不使用控制器的情況下實現此目的,並且由於可能會發生時區問題,所以對客戶端發送不感興趣。
我的轉換器:
public class StringDateSerializer extends JsonSerializer<String> {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
@Override
public void serialize(String time, JsonGenerator gen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
Date date = new Date(Long.parseLong(time));
String formattedDate = dateFormat.format(date);
gen.writeString(formattedDate);
}
}
public class StringDateDeserializer extends JsonDeserializer<String> {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
@Override
public String deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
String dateReceived = parser.getText();
Date date = null;
try {
date = dateFormat.parse(dateReceived);
} catch (ParseException e) {
e.printStackTrace();
}
return String.valueOf(date.getTime());
}
}
這裏我使用,GET /測試/搜索/測試名稱= XX &日期= 14-06-2014?我需要獲取日期小於14-06-2014的所有名稱,並在14-06-2014之後或之後保留數據。
雖然POST和GET,我已經使用JsonSerialize和JsonDeserialize註釋轉換傳入和傳出的字符串,但如果我想使用查找器方法獲取任何數據,它不會轉換,因爲我認爲。例如,如果我保存{「name」:「Test」,「date」:「08-10-2014」},那麼在數據庫中它將被保存等價時間,如果我想使用它搜索它08-10-2014不是時間常數。我是新來的泉水,我無法找到一個方法。提前致謝。
我有沒有正確理解,你不能查詢日期字符串「08-10-2014」,而你有一個記錄{「名稱」:「測試」,「日期」:「08-10-2014」}在你的DynamoDB? – mavarazy
@mavarazy - >不,我只會將它保存爲字符串。所以我可以查詢它。其實我會把它作爲字符串,並使用這個** String.valueOf(date.getTime())**,我將它保存到數據庫,即使我們保存爲08-06-2014也我們可以搜索它,因爲我們是將其保存爲字符串。但是我們不能像這些操作那樣執行LessThan或GreaterThan。所以我更願意將它保存爲時間,而我使用** GET/test/search/testsearch **我將傳遞參數**?name = test && date = 08-01-2014 **和存儲庫中** @Param * *用於讀取數據,必須使用轉換器從08-01-2014轉換爲等效時間 – jAddict
如果您希望能夠按日期查詢,請查看http://stackoverflow.com/questions/14836600/querying -dynamodb-dy-date,雖然,據我所知GSI還沒有被spring-data-dynamodb支持,你可以在github中做適當的請求。 – mavarazy