- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须将传入的参数值转换为存储库接口(interface)所需的格式,是否可以做到。我的域类,
@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);
}
这里我必须使用Java的getTime()方法将传入的日期字符串转换为时间。是否可以在不使用 Controller 的情况下实现此目的,并且我对从客户端发送不感兴趣,因为可能会出现时区问题。
我的转换器:
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/test/search/test?name=xx&date=14-06-2014。我需要获取日期小于 14-06-2014 的所有名称,并保留 14-06-2014 或之后的数据。
在 POST 和 GET 时,我已经使用 JsonSerialize 和 JsonDeserialize 注释转换了传入和传出字符串,但如果我想使用 finder 方法获取任何数据,它不会像我想象的那样进行转换。
例如,如果我保存 {"name": "Test", "date": "08-10-2014"},在数据库中它将按其等效时间保存,如果我想使用 < 搜索它strong>08-10-2014 不是时间常数。我是 Spring 新手,找不到方法。提前致谢。
最佳答案
您使用 String
的原因是什么?首先作为日期的类型。这是相当次优的(礼貌地说)API 设计。
Spring Data REST 支持 @DateTimeFormat
的使用在查询方法参数上将 String
您从 HTTP 请求获取的基本表示形式为 Date
。所以你的存储库界面可能看起来像这样:
public interface TestRepository extends PagingAndSortingRepository<Test, String>{
public Page<Test> findByNameAndDate(@Param("name") String name,
@Param("date") @DateTimeFormat(iso = ISO.DATE) Date date, Pageable pageable);
}
这将导致String
就像 2014-06-08
转成合适的Date
.
关于java - 如何在 Spring Data Rest 中格式化@param字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24096924/
我是一名优秀的程序员,十分优秀!