我的问题与this one差不多是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 collectionB
的参数中定义http://localhost/api/test?plainFieldA=1
而无需创建转换器? @GameSalutes正确地指出,自春季4
以来,我们可以进行fieldB.plainFieldB=2
,因此网址为:http://localhost/api/test?plainFieldA=1&fieldB.plainFieldB=2
,但问题是我们可以与collectionB
做类似的事情而不创建一个转换器?
答案 0 :(得分:2)
是的,您可以像这样发出请求:
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中带有断点的结果:
答案 1 :(得分:0)
接受的答案就像一个咒语,但是如果有人达到URL大小限制或其他原因,我将添加此答案作为替代。
按照this thread的建议,这是我的工作方式。
用邮递员调试您的API并不是最好的方法,但它对我来说可以正常工作。
原始对象: {页面:1,大小:5,过滤器:[{字段:“ id”,值:1,比较:“ EQ”}
编码对象: eyJwYWdlIjoxLCJzaXplIjo1LCJmaWx0ZXJzIjpbeyJmaWVsZCI6ImlkUGFyZW50IiYYY29tcGFyaXNvbiI6Ik5VTEwifV19
@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
)