我是一个新的编程,我正在尝试建立一个小的饮食跟踪应用程序。我使用quarkus、RESTeasy、JAX-RS和java来构建我的REST API。用户应该能够添加他在一周中几天吃的食物。
用户必须能够根据日期检索他吃过的食物。我的问题是我不能根据日期取回食物。当我使用时间戳:“2021-06-10T08:44:45.9328079Z[UTC]”作为GET方法终点上的输入日期时,我在Postman中得到400个坏请求。当我根据用户ID检索食物时,它工作得很好。
下面是我使用GET和POST方法的代码:
@path(“/foods”)公共类控制器{
public static ArrayList<Object> foods = new ArrayList<>();
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllFood(){
return Response.ok(foods).build();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response addFood() throws ParseException {
foods.add(new Food("Garlic", 30, Timestamp.from(Instant.now()), 1));
foods.add(new Food("Onions", 20, Timestamp.from(Instant.now()), 2));
return Response.ok(foods).build();
}
@Path("{userId}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public static Response getFoodById(@PathParam("userId") int userId){
for (Object food : foods){
if (((Food)food).getUserId()==(userId)){
return Response.ok(food).build();
}
}
return null;
}
@Path("/second/{time}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getFoodByDate(@PathParam("time") Timestamp time){
for (Object food : foods){
if (((Food)food).getTime().toString().equals(time.toString())){
return Response.ok(food).build();
}
}
return null;
}
}
package org.acme;
private String foodType;
private int portion;
private Timestamp time;
private int userId;
public Food(){}
public Food(String foodType, int portion, Timestamp time, int userId){
this.foodType = foodType;
this.portion = portion;
this.time = time;
this.userId = userId;
}
public String getFoodType() {
return foodType;
}
public void setFoodType(String foodType) {
this.foodType = foodType;
}
public int getPortion() {
return portion;
}
public void setPortion(int portion) {
this.portion = portion;
}
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Override
public String toString(){
return foodType + ", " + portion + ", " + time + ", " + userId;
}
}
OK-Postman抛出的错误是400 bad request的原因是由于您的输入参数不正确。
从@PathParam
更改为@RequestParam
的示例代码
@Path("/get/second/")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getFoodByDate(@RequestParam("time") String dateString) throws ParseException{
ArrayList<Food> foods = new ArrayList<>();
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date requestedDate = sdf.parse(dateString);
for (Object food : foods){
if (((Food)food).getTime().equals(requestedDate)){
return Response.ok(food).build();
}
}
return null;
}
在本例中,我将您的时间戳参数更改为java.SQL.timestamp是java.util.date的薄包装器,它允许JDBC API将其标识为SQL时间戳值,因此在本例中不建议使用时间戳。
public class Food {
private String foodType;
private int portion;
private Date time;
private int userId;
public Food(){}
public Food(String foodType, int portion, Date time, int userId){
this.foodType = foodType;
this.portion = portion;
this.time = time;
this.userId = userId;
} ... //getter and setter
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Food food1 = new Food("Garlic", 10, sdf.parse("2020-05-01"), 1);
Food food2 = new Food("Onion", 20, sdf.parse("2020-05-02"), 1);
Food food3 = new Food("Potato", 30, sdf.parse("2020-05-03"), 1);
Food food4 = new Food("Tomato", 40, sdf.parse("2020-05-04"), 1);
ArrayList<Food> foods = new ArrayList<>();
foods.add(food1);
foods.add(food2);
foods.add(food3);
foods.add(food4);
package org.example;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2020-05-01"; //mocking request date from the @RequestParam
Date requestedDate = sdf.parse(dateString);
Food food1 = new Food("Garlic", 10, sdf.parse("2020-05-01"), 1);
Food food2 = new Food("Onion", 20, sdf.parse("2020-05-02"), 1);
Food food3 = new Food("Potato", 30, sdf.parse("2020-05-03"), 1);
Food food4 = new Food("Tomato", 40, sdf.parse("2020-05-04"), 1);
ArrayList<Food> foods = new ArrayList<>();
foods.add(food1);
foods.add(food2);
foods.add(food3);
foods.add(food4);
for (Object food : foods){
if (((Food)food).getTime().equals(requestedDate)){
System.out.print(food);
}
}
}
}
产量:大蒜,10,Fri.5月01 00:00:00 SGT,2020,1
到目前为止,我只能与Jira建立连接,但我不知道如何获取特定字段。据我所知,JIRA API的SearchResult类可以解决这个问题,但我不知道如何将它集成到我现有的代码中。任何帮助都将不胜感激。 Java版本-8,操作系统-视窗10,日蚀-火星 /*使用的罐子:jersey-bundle-1.9。罐子(https://mvnrepository.com/artifact/com.sun.je
我已经设置了ModelAndView对象 然后,我在JSP中导入了其他助手 然后我尝试使用文档字段作为如下参数 IDEA告诉我那个文件没有解决 堆栈跟踪 在jsp文件中的[44]行发生错误:[/WEB-INF/view/jsp/admin/document_card.jsp]document.pub_date无法解析为类型41: РћРїСѓР±Р"икование 42: 43:
试图从我的php api中获取一个值,在android上,使用截取。。。我的api运行良好,返回了我想要的值,但在我的android上,我似乎可以将值保存在一个变量上。 这是我的php脚本 在我的android studio上,我尝试像这样获取值,我发送3个值插入到数据库中,然后我想将我插入的行的id返回到android。我看过很多关于stackoverflow的答案,但我似乎无法理解和解决我的问
所以我有一个类型为Date的字段,有没有一种方法可以在它的getter方法中将其转换为LocalDateTime?到目前为止我所掌握的是.. 但它似乎不起作用。
问题内容: 我正在尝试将json对象导入变量。我根据教程使用服务。 我收到意外的令牌错误,因为我不应该使用 -但我真的不知道该使用什么。我用谷歌搜索了3个小时,发现只有$ http。或$ json。答案,但是我觉得可以做得更容易-更清晰。 (完美的解决方案是; D 服务文件: 控制器文件: json文件(几乎; D) 编辑: 我将$ resource(’file.json更改为https://ww
我希望通过ContainerRequestFilter中的ExtendedUriInfo检索matchedResources/matchedResults,以便检查路径是否应该受到保护。是否有一种方法可以创建一个在ExtendedUriInfo填充之后,但在调用匹配的资源类和方法之前调用的筛选器?