Как отправить карту в качестве запроса телосложению в остальных звонить из Java - PullRequest
0 голосов
/ 09 января 2019

У меня есть конечная точка отдыха, которая принимает RequestParam и RequestBody в качестве параметра. На стороне клиента я использую клиент javax для вызова этой конечной точки отдыха, но получаю проблему, так как код ответа 405. приходит с сервера.

Вот код SpringBoot restEndpoint:

@RequestMapping(value = "/run", method = RequestMethod.POST, consumes = "application/json")
    public ReportRunResult runBackendCall(@RequestParam(name = "clientName", required = true) String reportName,
                                     @RequestBody Map<String, ReportParameter> formParams) {
        return service.runReport(reportName, formParams);
    } 

вот как я вызываю эту конечную точку с клиента:

 public ReportRunResult runBackendCall(String name, Map<String, ReportParameter> parameters) {

  ReportRunResult reportResponse = null;
        WebTarget target = RestClientBuilder.clientBuilder(RestClientBuilder.buildSSLContext(), 3000, 10000).build()
                .target(serverURL.get() + "/run?reportName=" + name);

        Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON_TYPE);
        Response response = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(parameters));

        reportResponse = response.readEntity(ReportRunResult.class);
        log.info("response. " + response.getStatus() + " ");   
    }

Я не понимаю, почему сервер отправляет ответ 405 Нужно ли конвертировать Map (параметры) в строку json в Entity.json (параметры));

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Код состояния 405 сообщает вам Method Not Allowed, поэтому, возможно, есть проблема с вашим HTTP-методом .

Существует также ошибка в вашем коде в WebTarget, в котором вы используете reportName как RequestParam, но REST-Service хочет clientName как RequestParam.

Так что измени

@RequestParam(name = "clientName", required = true)

до

@RequestParam(name = "reportName", required = true)
0 голосов
/ 09 января 2019

вы можете использовать JSONObject следующим образом:

new JSONObject(map)

PS: карта должна быть типа Map<String,String>

...