REST API:使用GET请求匹配文件中的ID并显示ID对应的object

REST API: Using a GET Request to match an ID within a File and display the object corresponding to ID

我正在做的 RESTful API 项目确实需要帮助。我进行了广泛的搜索,现在正处于十字路口。这对我来说很新,我不太了解所有内容,所以如果这是一个基本问题,我深表歉意。

我需要做的事情:

我需要创建一个 "getVehicle" 方法来执行以下操作:

这是header:

 @RequestMapping(value = "/getVehicle/{id}", method = RequestMethod.GET)
 public Vehicle getVehicle(@PathVariable("id") int id) throws IOException {

我确实知道如何使用纯粹的 Java 来做到这一点,但是这个 RESTful 的东西让我陷入困境。

我的理解:

据我了解,当我发出 GET 请求时(我为此使用 Advance REST Client),我为 {id} 输入的 ID 将与我的文本文件(称为 inventory.txt).

我使用 POST 方法用 6 个条目填充了我的文本文件,所有这些都是关于各种 "vehicles" 的信息。因此,如果我向 url http://localhost808/getVehicle/2 发出 GET 请求,我应该获得有关 ID 为 2 的 "vehicle" 的信息。

我的问题:

但是,根据我目前的情况,我的文件没有被迭代,所以我得到的唯一 "vehicle" 是 id 0。

我目前有:

    @RequestMapping(value = "/getVehicle/{id}", method = RequestMethod.GET)
    public Vehicle getVehicle(@PathVariable("id") int id) throws IOException 
    {
        //ObjectMapper provides functionality for reading and writing JSON
        ObjectMapper mapper = new ObjectMapper();

        String inventory = FileUtils.readFileToString(new 
            File("./inventory.txt"),
                CharEncoding.UTF_8);

        //Deserialize JSON to vehicle object
        Vehicle vehicle = mapper.readValue(inventory, Vehicle.class);

        if (vehicle.getId() == id) {
                return vehicle;
        }

        return null;
    }

我的要求:

我不知道如何遍历我的文本文件以找到所请求的 ID。

弄清楚这一点将彻底消除我的困惑并帮助我完成我的项目

任何提示、技巧、资源,任何能让我走上解决这个问题的道路的东西都将不胜感激。再一次,这对我来说非常好,我正在努力保持理智。

如果我需要澄清任何事情,请告诉我!

感谢所有花时间在这里帮助我的人 :D!

您不能遍历 inventory,因为它是一个字符串。您可以遍历 vehicle,因为您正在将 inventory 字符串转换为 Vehicle 对象。

好的,我刚刚发现了一个错误。 Vehicle vehicle 这是一个单独的对象。你需要一个数组。

@RequestMapping(value = "/getVehicle/{id}", method = RequestMethod.GET,
                 produces = MediaType.APPLICATION_JSON_VALUE)
public Vehicle getVehicle(@PathVariable("id") int id) throws IOException {
    //ObjectMapper provides functionality for reading and writing JSON
    ObjectMapper mapper = new ObjectMapper();

    String inventory = FileUtils.readFileToString(new 
        File("./inventory.txt"),
            CharEncoding.UTF_8);

    //Deserialize JSON to vehicle object
    List<Vehicle> vehicle = (Vehicle)mapper.readValue(inventory, Vehicle.class);
    // Or
    List<Object> vehicle = mapper.readValue(inventory, Vehicle.class);
    // Recommend the first option, its better to use types, things less likely to go wrong.

    for (Vehicle v: vehicle){
      if (vehicle.getId() == id) {
        return vehicle;
      }
    }

    return null;
}

这个问题是用 LineIterator 解决的!

我的代码在这里:

@RequestMapping(value = "/getVehicle/{id}", method = RequestMethod.GET)
public Vehicle getVehicle(@PathVariable("id") int id) throws IOException {

    //ObjectMapper provides functionality for reading and writing JSON
    ObjectMapper mapper = new ObjectMapper();

    //Makes inventory.txt an iterable object
    LineIterator inventory = FileUtils.lineIterator(new File("./inventory.txt"),
            CharEncoding.UTF_8);

    //Container for when vehicle is found
    String vehicle = "";

    //iterates through inventory.txt until it reaches the end or finds the vehicle via id
    while(inventory.hasNext()) { 
        //Stores each vehicle
        String tempVehicle = inventory.next(); 
        //Creates a vehicle object for JSON
        Vehicle v = mapper.readValue(tempVehicle, Vehicle.class); 

        //checks if id of JSON vehicle object matches the id passed through
        if(v.getId() == id) { 
            vehicle = tempVehicle;
        }
    }
    //Returns the found vehicle as a new Objectmapper (still a bit confused about this one)
    return new ObjectMapper().readValue(vehicle, Vehicle.class);
}