postman json响应 Spring Boot 中缺少字段

km0tfn4u  于 2022-12-26  发布在  Postman
关注(0)|答案(2)|浏览(230)

我有一个只有两个字段的Stock响应类,如下所示

class StockResponse {

private String orderId;
private String status;

//constructor

//getters and setters

}

并且控制器如下

@RestController
 @RequestMapping("/stocks")
 public class StockController {

 private static List<StockResponse> stocktList = new ArrayList <StockResponse > ();
 
 static {
     stocktList.add(new StockResponse("order1", "AVAILABLE"));
     stocktList.add(new StockResponse("order2", "AVAILABLE"));
     stocktList.add(new StockResponse("order3", "NOT AVAILABLE"));
     stocktList.add(new StockResponse("order4", "AVAILABLE"));
    
 }

 @GetMapping("/")
 public ResponseEntity < ? > getProsucts() {

  return ResponseEntity.ok(stocktList);

 }

 @GetMapping(path="/{id}", produces = "application/json;charset=UTF-8")
 public StockResponse getProsucts(@PathVariable String id) {

     StockResponse product = findOrder(id);
     
  if (product == null) {
 //  return ResponseEntity.badRequest(product)
 //   .body("Invalid product Id");
  }
  System.out.println(product.getOrderId());
  System.out.println(product.getStatus());
  

  return new StockResponse(product.getOrderId(), product.getStatus());

 }

 private StockResponse findOrder(String id) {
  return stocktList.stream()
   .filter(user -> user.getOrderId()
    .equals(id))
   .findFirst()
   .orElse(null);
 }

}

当我调用localhost:8082/stocks/order 1时,我得到的响应只有一个字段,如下所示x1c 0d1x
我还能错过什么

7vhp5slm

7vhp5slm1#

我无法重现这一点,这意味着它对我有效。
列出所有股票

$ curl -sS 'http://localhost:8080/stocks/' | jq "."
[
  {
    "orderId": "order1",
    "status": "AVAILABLE"
  },
  {
    "orderId": "order2",
    "status": "AVAILABLE"
  },
  {
    "orderId": "order3",
    "status": "NOT AVAILABLE"
  },
  {
    "orderId": "order4",
    "status": "AVAILABLE"
  }
]

获取特定股票

$ curl -sS 'http://localhost:8080/stocks/order1' | jq "."
{
  "orderId": "order1",
  "status": "AVAILABLE"
}

我的StockController和你的完全一样,我也复制粘贴了你的StockResponse,得到了和你的完全一样的字段名,但是因为你没有包含构造函数/getter和setter,我将展示一个适合我的。
示例化stocktList列表中的StockResponse对象的方法是使用构造函数,这可能表明您实际上没有在对象上设置this.status,如果这不起作用,请再次检查状态字段的getter是否实际上被称为getStatus()

public class StockResponse {

    private String orderId;
    private String status;

    public StockResponse(String orderId, String status) {
        this.orderId = orderId;
        this.status = status;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

事实上,您的回答包含一个字段,该字段使用“非标准”大写字母作为第一个字母,这告诉我,您可能正在做一些其他不标准的事情,可能会影响您的结果。

bjp0bcyl

bjp0bcyl2#

我确保了所有的getter和setter都是公共的,我仔细查看了一下,发现我在

public String getStatus()

相关问题