gpt4 book ai didi

java - 如何在 Spring Data Rest 中格式化@param字符串

转载 作者:行者123 更新时间:2023-12-02 11:16:11 27 4
gpt4 key购买 nike

我必须将传入的参数值转换为存储库接口(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/

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