java 如何在Json中添加一定范围的值并返回该范围内的对象

afdcj2ne  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(120)

我正在尝试在Controller类中创建一个方法以返回位置列表
我想给予它一个纬度和经度的范围,并返回列表中的位置。
当前控制器类中的Get methon如下所示

@GetMapping public ResponseEntity<List<Location>> searchLocations(
    @RequestParam(required = false) Location.LocationType type,
    @RequestParam Double lat1, @RequestParam Double lng1, 
    @RequestParam Double lat2, @RequestParam Double lng2,
    @RequestParam(required = false, defaultValue = "10") Integer limit) {
    
    Pageable pageable = PageRequest.of(0, limit);
    List<Location> locations = locationRepository.findByLatBetweenAndLngBetweenAndTypeOrderByTypeDesc(
        Math.min(lat1, lat2), Math.max(lat1, lat2), Math.min(lng1, lng2), Math.max(lng1, lng2), type, pageable);
    
    return ResponseEntity.ok(locations); }

我传入的数据是

{
"lat1": 46.6,
"lng1": 46.6, 
"lat2": 48.8, 
"lng2": 48.8,
"type": "premium",
"limit": 3
}

我想传入一个Json,它看起来像

"p1": 46.6, 15.4
"p2": 48.8, 17.5
"type": "premium"
"limit": 3

因此,p1和p2是点,它返回这些点内的位置

dfty9e19

dfty9e191#

查看@RequestBody以传递结构,您当前正在处理URL参数。

@GetMapping
public ResponseEntity<List<Location>> searchLocations(
    @RequestBody RequestDto requestDto
) {
    . . . .

在JSON中,不能以这种方式返回值。
你必须这样做:

{
  "p1": {
     "lat": 46.6,
     "lng": 15.4
   },
   "p2": {
     "lat": 48.8,
     "lng": 17.5
    },
    "type": "premium",
    "limit": 3
}

或者一个值数组(恕我直言,这看起来很糟糕):

{
  "p1": [ 46.6, 15.4 ],
  "p2": [ 48.8, 17.5 ],
  "type": "premium",
  "limit": 3
}

相关问题