поле отсутствует в ответе json spring boot

#json #spring-boot #postman #rest #get-mapping

#json #spring-boot #почтальон #остальное #получить сопоставление

Вопрос:

У меня есть стандартный класс ответов только с двумя полями следующим образом

 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/order1, я получаю ответ, в котором отображается только одно поле следующим образом
введите описание изображения здесь

что я мог упустить?

Ответ №1:

Я не могу воспроизвести это, что означает, что это работает для меня.

Список всех запасов

 $ 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 , чтобы получить имена полей, идентичные вашим, но поскольку вы не включили конструктор / средство получения и средство установки, я покажу тот, который работает для меня.

То, как вы создаете экземпляры StockResponse объектов в stocktList списке, использует конструктор, и это может указывать на то, что вы на самом деле не устанавливаете this.status для объектов. Если это не сработает, дважды проверьте, действительно ли вызывается средство получения поля состояния 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;
    }
}
  

Тот факт, что ваш ответ содержит поле, в котором для первой буквы используется «нестандартный» верхний регистр, говорит мне о том, что, возможно, вы делаете что-то еще, что не является стандартным, что может повлиять на ваш результат.

Комментарии:

1. Спасибо, я внимательно посмотрел, и я пропустил public на public String getStatus()

Ответ №2:

Я убедился, что все мои геттеры и сеттеры являются общедоступными, я внимательно посмотрел и пропустил public на

  public String getStatus() 
  

Комментарии:

1. Можете ли вы вместо этого обновить OP?