[英]Spring REST - binding GET parameters to list of nested objects
我的问题几乎是1:1的这一个。 我唯一的区别(和挣扎)是我的“数据容器”有一组对象。 它看起来像这样:
public class A {
int plainFieldA;
B fieldB;
List<B> collectionB = new ArrayList<>();
}
public class B {
int plainFieldB;
}
@Transactional(readOnly = true)
@GetMapping("")
public Entity getAll(A reqParam) {
return getAll(reqParam);
}
是否可以在不创建转换器的情况下在 url http://localhost/api/test?plainFieldA=1
参数中定义collectionB
? @GameSalutes 正确地指出,从 spring 4
我们可以执行fieldB.plainFieldB=2
所以 url 将是: http://localhost/api/test?plainFieldA=1&fieldB.plainFieldB=2
但问题是我们可以做类似的事情collectionB
没有创建转换器?
是的,您可以像这样提出请求:
http://localhost/api/test?plainFieldA=1&fieldB.plainFieldB=2&collectionB[0].plainFieldB=9
或者为邮递员编码请求:
http://localhost/api/test?plainFieldA=1&fieldB.plainFieldB=2&collectionB%5B0%5D.plainFieldB=9
请求两个对象:
http://localhost/api/test?plainFieldA=1&fieldB.plainFieldB=2&collectionB%5B0%5D.plainFieldB=9&collectionB%5B1%5D.plainFieldB=11
IDE中带断点的结果:
接受的答案就像一个魅力,但如果有人达到 url 大小限制或其他原因,我会添加这个答案作为替代方案。
按照这个线程建议,这是我的做法。
它不是用邮递员调试 API 的最佳选择,但它按我的预期工作。
原始对象: {页面:1,大小:5,过滤器:[{字段:“id”,值:1,比较:“EQ”}
编码对象: eyJwYWdlIjoxLCJzaXplIjo1LCJmaWx0ZXJzIjpbeyJmaWVsZCI6ImlkUGFyZW50IiwiY29tcGFyaXNvbiI6Ik5VTEwifV19
@GetMapping
fun list(@RequestParam search: String?): ResponseEntity<ListDTO> {
val filter: SearchFilterDTO = decodeSearchFieldDTO(search)
...
}
private fun decodeSearchFieldDTO(search: String?): SearchFilterDTO {
if (search.isNullOrEmpty()) return SearchFilterDTO()
return Gson().fromJson(String(Base64.getDecoder().decode(search)), SearchFilterDTO::class.java)
}
这里是 SearchFilterDTO 和 FilterDTO
class SearchFilterDTO(
var currentPage: Int = 1,
var pageSize: Int = 10,
var sort: Sort? = null,
var column: String? = null,
var filters: List<FilterDTO> = ArrayList<FilterDTO>(),
var paged: Boolean = true
)
class FilterDTO(
var field: String,
var value: Any,
var comparison: Comparison
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.