Как написать веб-сервис в контроллере для этого отформатированного json в java

При попытке использовать данные json в загрузочном приложении java spring получите сообщение о неверном запросе от postmain или приложения в сети. Невозможно найти первопричину этого.

Формат Json используется в приложении следующим образом

{
    "stateOfCharge": 30,
    "timeSpendAtDest": 30,
    "userId": 3745,
    "distanceInMeters": 2478.91864342829,
    "stationsList": [{
        "csId": 50,
        "csLat": 17.491125,
        "csLng": 78.397686,
        "energyLevel": "LEVEL1",
        "maxChargeTimeInMins": 720,
        "outPutRateInKw": 2,
        "price": 0.8,
        "distance": 126.31235091469274
    }, {
        "csId": 52,
        "csLat": 17.491168,
        "csLng": 78.398331,
        "energyLevel": "LEVEL2",
        "maxChargeTimeInMins": 480,
        "outPutRateInKw": 19,
        "price": 2.5,
        "distance": 85.98535639001425
    }, {
        "csId": 50,
        "csLat": 17.491125,
        "csLng": 78.397686,
        "energyLevel": "DCFAST",
        "maxChargeTimeInMins": 30,
        "outPutRateInKw": 350,
        "price": 15,
        "distance": 126.31235091469274
    }]
}

Контроллер написан таким образом и получает 400 неверных ответов на запрос в java

@PostMapping("/stations")
    @ApiOperation(value = "Get charging stations around 400 radius from the charging location.")
    @ApiResponses(value = { 
            @ApiResponse(code = 200, message = "Success"),
    })
    public void findChargingStations(
            @ApiParam(value = "stateOfCharge") @NotNull @RequestParam Integer stateOfCharge,
            @ApiParam(value = "timeSpendAtDest") @NotNull @RequestParam Integer timeSpendAtDest,
            @ApiParam(value = "userId") @NotNull @RequestParam Integer userId,
            @ApiParam(value = "distanceInMeters") @NotNull @RequestParam Integer distanceInMeters,
            @RequestBody(value = "stationsList") @NotNull @RequestParam FindStations stationsList
            ) throws Exception {
        this.findChargingStationsService.getFilteredStations(stateOfCharge, timeSpendAtDest, userId, distanceInMeters,stationsList);
        return;
        }

FindStation — это любой интерфейс для сопоставления полей.

public interface FindStations {
    int getCsId();
    double getCsLat();
    double getCsLng();
    float getPrice();
    String getEnergyLevel();
    int getMaxChargeTimeInMins();
    int getOutPutRateInKw();
    int getDistance();
}

Может кто поможет решить проблему

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы отправляете некоторые сложные данные на серверную часть. Вы можете отправить его в теле запроса, а не в качестве параметров запроса.

Для этого вы можете использовать @RequestBody.

Во-первых, давайте создадим несколько классов DTO для обработки данных, отправляемых из внешнего интерфейса:

public class StationRequest {
    private int stateOfCharge;
    private int timeSpendAtDest;
    private int userId;
    private double distanceInMeters;
    private List<Station> stationsList;

    public int getStateOfCharge() {
        return stateOfCharge;
    }

    public void setStateOfCharge(int stateOfCharge) {
        this.stateOfCharge = stateOfCharge;
    }

    // Other getters and setters omitted for readability. You may want to consider project Lombok
}
public class Station {
    private int csId;
    private double csLat;
    private double csLng;
    private String energyLevel;
    private int maxChargeTimeInMins;
    private int outPutRateInKw;
    private double price;
    private double distance;
  
    // Getters and setter omitted.
}

Создадим контроллер:

@PostMapping("/stations")
public void findChargingStations(@RequestBody StationRequest stationRequest) {
    // Do some business logic
}

Большое спасибо. Это работает нормально.

Anil Kumar 10.04.2022 14:47

Другие вопросы по теме