#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?