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" 方法来执行以下操作:
- getVehicle() 将获取给定的 id,并找到具有
匹配标识。
- 会遍历本地文件line-by-line,检查是否
id 匹配,如果匹配 return 车辆 object.
这是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);
}
我正在做的 RESTful API 项目确实需要帮助。我进行了广泛的搜索,现在正处于十字路口。这对我来说很新,我不太了解所有内容,所以如果这是一个基本问题,我深表歉意。
我需要做的事情:
我需要创建一个 "getVehicle" 方法来执行以下操作:
- getVehicle() 将获取给定的 id,并找到具有 匹配标识。
- 会遍历本地文件line-by-line,检查是否 id 匹配,如果匹配 return 车辆 object.
这是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);
}