Java 如何使用Spring引导Rest控制器返回JSONArray?

Java 如何使用Spring引导Rest控制器返回JSONArray?,java,spring,rest,spring-boot,Java,Spring,Rest,Spring Boot,我有一个返回JSONArray的方法。 现在我想用我的Spring Boot Rest控制器返回JSONArray,但它只在我的浏览器中重新运行“{“empty”:false}” 我希望你能理解我的问题 谢谢你的帮助 来自德国的问候:D 尼古拉斯 我试图返回一个列表,但结果是一样的 我的RestController package eliteDangerousRestService.restController; import java.util.List; import org.json.

我有一个返回JSONArray的方法。 现在我想用我的Spring Boot Rest控制器返回JSONArray,但它只在我的浏览器中重新运行“{“empty”:false}”

我希望你能理解我的问题

谢谢你的帮助

来自德国的问候:D

尼古拉斯

我试图返回一个列表,但结果是一样的

我的RestController

package eliteDangerousRestService.restController;

import java.util.List;

import org.json.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import eliteDangerousRestService.restApplications.commodity.GetStationWithSpecificCommodity;


@RestController
public class Controller
{

    @RequestMapping( value = "/elite-dangerous/commodity", method = RequestMethod.GET )
    @ResponseBody
    public List<JSONObject> getCommodity
            (
                    @RequestParam( value = "currentSystem", defaultValue = "Sol" ) String currentSystenName,
                    @RequestParam( value = "radius", defaultValue = "30" ) Integer radius,
                    @RequestParam( value = "inklSystemsWithPermission", required = false, defaultValue = "false" ) Boolean inkSystemsWithPermission,
                    @RequestParam( value = "inkPlanetrayStations", required = false, defaultValue = "false" ) Boolean inkPlanetrayStations,
                    @RequestParam( value = "commodityName", required = false, defaultValue = "$Gold_Name" ) String commodityName,
                    @RequestParam( value = "count", required = false, defaultValue = "10" ) Integer count,
                    @RequestParam( value = "multi", required = false, defaultValue = "2" ) Double multiplayer,
                    @RequestParam( value = "maxAge", required = false, defaultValue = "15" ) Integer maxAge

            )

    {

        System.out.println( currentSystenName );
        System.out.println( radius );
        System.out.println( inkSystemsWithPermission );
        System.out.println( inkPlanetrayStations );
        System.out.println( commodityName );
        System.out.println( count );
        System.out.println( multiplayer );
        System.out.println( maxAge );

        GetStationWithSpecificCommodity getStationWithSpecificCommodity = new GetStationWithSpecificCommodity();
        List<JSONObject> list = getStationWithSpecificCommodity.getAllData( currentSystenName, radius,
                inkSystemsWithPermission, inkPlanetrayStations, commodityName, count, multiplayer, maxAge );
        System.out.println( list.toString() );
        return list;

    }
}


考虑到您正试图返回一个RESTful响应,我建议返回一个ResponseEntity,并在响应主体中列出列表

    @RequestMapping( value = "/elite-dangerous/commodity", method = RequestMethod.GET )
    @ResponseBody
    public ResponseEntity<?> getCommodity
            (
                @RequestParam( value = "currentSystem", defaultValue = "Sol" ) String currentSystenName,
                @RequestParam( value = "radius", defaultValue = "30" ) Integer radius,
                @RequestParam( value = "inklSystemsWithPermission", required = false, defaultValue = "false" ) Boolean inkSystemsWithPermission,
                @RequestParam( value = "inkPlanetrayStations", required = false, defaultValue = "false" ) Boolean inkPlanetrayStations,
                @RequestParam( value = "commodityName", required = false, defaultValue = "$Gold_Name" ) String commodityName,
                @RequestParam( value = "count", required = false, defaultValue = "10" ) Integer count,
                @RequestParam( value = "multi", required = false, defaultValue = "2" ) Double multiplayer,
                @RequestParam( value = "maxAge", required = false, defaultValue = "15" ) Integer maxAge

            )

    {

    System.out.println( currentSystenName );
    System.out.println( radius );
    System.out.println( inkSystemsWithPermission );
    System.out.println( inkPlanetrayStations );
    System.out.println( commodityName );
    System.out.println( count );
    System.out.println( multiplayer );
    System.out.println( maxAge );

    GetStationWithSpecificCommodity getStationWithSpecificCommodity = new GetStationWithSpecificCommodity();
    List<JSONObject> list = getStationWithSpecificCommodity.getAllData( currentSystenName, radius,
            inkSystemsWithPermission, inkPlanetrayStations, commodityName, count, multiplayer, maxAge );
    System.out.println( list.toString() );


    return ResponseEntity.ok(list);

}
@RequestMapping(value=“/elite-hazard/commodity”,method=RequestMethod.GET)
@应答器
公共责任
(
@RequestParam(value=“currentSystem”,defaultValue=“Sol”)字符串currentSystenName,
@RequestParam(value=“radius”,defaultValue=“30”)整数半径,
@RequestParam(value=“inklSystemsWithPermission”,required=false,defaultValue=“false”)布尔inkSystemsWithPermission,
@RequestParam(value=“inkPlanetrayStations”,required=false,defaultValue=“false”)布尔inkPlanetrayStations,
@RequestParam(value=“commodityName”,required=false,defaultValue=“$Gold\u Name”)字符串commodityName,
@RequestParam(value=“count”,required=false,defaultValue=“10”)整数计数,
@RequestParam(value=“multi”,required=false,defaultValue=“2”)双多人游戏,
@RequestParam(value=“maxAge”,required=false,defaultValue=“15”)整数maxAge
)
{
System.out.println(当前系统名称);
系统输出打印LN(半径);
System.out.println(inkSystemsWithPermission);
System.out.println(inkPlanetrayStations);
System.out.println(commodityName);
系统输出打印项次(计数);
System.out.println(多人游戏);
系统输出打印项次(最大值);
GetStationWithSpecificCommodity GetStationWithSpecificCommodity=新建GetStationWithSpecificCommodity();
List List=getStationWithSpecificCommodity.getAllData(当前系统名称、半径、,
inkSystemsWithPermission、inkPlanetrayStations、commodityName、count、multiplayer、maxAge);
System.out.println(list.toString());
返回ResponseEntity.ok(列表);
}
编辑:

我建议采用模型模式,并在处理api数据时使用Jackson作为POJO到JSON的序列化/反序列化器。现在,您正在尝试自己构造JSON响应。我不认为你所做的是错的,我只是认为这会使事情复杂化,而且对你来说,这会增加开销。如果您创建了一个响应模型,那么您的列表将是List,然后您的响应库将包含该列表


现在,您的列表似乎包含空/空数据。我会继续四处寻找,看看是否能找到一个与您的实现相关的答案。

嗨,布兰登,谢谢您的回答。现在我的回答是这样的:[{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},{“empty”:false},]谢谢你帮助我。尼古拉斯
[
  {
    "Stations": [
      {
        "Demand": 0,
        "StationName": "Daedalus",
        "LandingPadSize": "L",
        "MarketUpdatedAt": 1550116514,
        "DistanceToStar": 196,
        "Planetary": false,
        "Supply": 68929,
        "SellPrice": 8887,
        "SystemName": "Sol",
        "BuyPrice": 9079
      },
      {
        "Demand": 0,
        "StationName": "Burnell Station",
        "LandingPadSize": "M",
        "MarketUpdatedAt": 1550116815,
        "DistanceToStar": 359,
        "Planetary": false,
        "Supply": 445,
        "SellPrice": 9344,
        "SystemName": "Sol",
        "BuyPrice": 9545
      },
      {
        "Demand": 0,
        "StationName": "Galileo",
        "LandingPadSize": "L",
        "MarketUpdatedAt": 1550087622,
        "DistanceToStar": 502,
        "Planetary": false,
        "Supply": 46218,
        "SellPrice": 9057,
        "SystemName": "Sol",
        "BuyPrice": 9252
      },
      {
        "Demand": 0,
        "StationName": "Columbus",
        "LandingPadSize": "L",
        "MarketUpdatedAt": 1550099829,
        "DistanceToStar": 2493,
        "Planetary": false,
        "Supply": 295,
        "SellPrice": 9831,
        "SystemName": "Sol",
        "BuyPrice": 10044
      },
      {
        "Demand": 0,
        "StationName": "Titan City",
        "LandingPadSize": "L",
        "MarketUpdatedAt": 1550095558,
        "DistanceToStar": 5040,
        "Planetary": false,
        "Supply": 191,
        "SellPrice": 9680,
        "SystemName": "Sol",
        "BuyPrice": 9890
      }
    ],
    "General": {
      "CommodityID": 42,
      "SystemName": "Sol",
      "NeedsPermit": true,
      "Distance": 0
    }
  },
  {
    "Stations": [
      {
        "Demand": 0,
        "StationName": "al-Din Prospect",
        "LandingPadSize": "M",
        "MarketUpdatedAt": 1550116804,
        "DistanceToStar": 5586,
        "Planetary": false,
        "Supply": 341,
        "SellPrice": 9831,
        "SystemName": "Alpha Centauri",
        "BuyPrice": 9945
      },
      {
        "Demand": 0,
        "StationName": "Hutton Orbital",
        "LandingPadSize": "M",
        "MarketUpdatedAt": 1550115464,
        "DistanceToStar": 6397048,
        "Planetary": false,
        "Supply": 24,
        "SellPrice": 9831,
        "SystemName": "Alpha Centauri",
        "BuyPrice": 9945
      }
    ],
    "General": {
      "CommodityID": 42,
      "SystemName": "Alpha Centauri",
      "NeedsPermit": false,
      "Distance": 4.377120022057882
    }
  },
  {
    "Stations": [
      {
        "Demand": 0,
        "StationName": "Levi-Strauss Installation",
        "LandingPadSize": "M",
        "MarketUpdatedAt": 1550069914,
        "DistanceToStar": 6,
        "Planetary": false,
        "Supply": 1836,
        "SellPrice": 9444,
        "SystemName": "Barnard's Star",
        "BuyPrice": 9557
      },
      {
        "Demand": 0,
        "StationName": "Miller Depot",
        "LandingPadSize": "L",
        "MarketUpdatedAt": 1550111992,
        "DistanceToStar": 38,
        "Planetary": false,
        "Supply": 93,
        "SellPrice": 9831,
        "SystemName": "Barnard's Star",
        "BuyPrice": 9946
      },
      {
        "Demand": 0,
        "StationName": "Boston Base",
        "LandingPadSize": "L",
        "MarketUpdatedAt": 1550116825,
        "DistanceToStar": 62,
        "Planetary": false,
        "Supply": 48,
        "SellPrice": 9831,
        "SystemName": "Barnard's Star",
        "BuyPrice": 9945
      }
    ],
    "General": {
      "CommodityID": 42,
      "SystemName": "Barnard's Star",
      "NeedsPermit": false,
      "Distance": 5.954662695107087
    }
  },
.
.
.
.
 and so on.
    @RequestMapping( value = "/elite-dangerous/commodity", method = RequestMethod.GET )
    @ResponseBody
    public ResponseEntity<?> getCommodity
            (
                @RequestParam( value = "currentSystem", defaultValue = "Sol" ) String currentSystenName,
                @RequestParam( value = "radius", defaultValue = "30" ) Integer radius,
                @RequestParam( value = "inklSystemsWithPermission", required = false, defaultValue = "false" ) Boolean inkSystemsWithPermission,
                @RequestParam( value = "inkPlanetrayStations", required = false, defaultValue = "false" ) Boolean inkPlanetrayStations,
                @RequestParam( value = "commodityName", required = false, defaultValue = "$Gold_Name" ) String commodityName,
                @RequestParam( value = "count", required = false, defaultValue = "10" ) Integer count,
                @RequestParam( value = "multi", required = false, defaultValue = "2" ) Double multiplayer,
                @RequestParam( value = "maxAge", required = false, defaultValue = "15" ) Integer maxAge

            )

    {

    System.out.println( currentSystenName );
    System.out.println( radius );
    System.out.println( inkSystemsWithPermission );
    System.out.println( inkPlanetrayStations );
    System.out.println( commodityName );
    System.out.println( count );
    System.out.println( multiplayer );
    System.out.println( maxAge );

    GetStationWithSpecificCommodity getStationWithSpecificCommodity = new GetStationWithSpecificCommodity();
    List<JSONObject> list = getStationWithSpecificCommodity.getAllData( currentSystenName, radius,
            inkSystemsWithPermission, inkPlanetrayStations, commodityName, count, multiplayer, maxAge );
    System.out.println( list.toString() );


    return ResponseEntity.ok(list);

}