Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Rest-сервис. Проблема получения данных в веб-запросе

Поставлена задача, с веб-сервиса вытащить JSON-массив, а затем его обработать. По идее, технология Rest, должна выводить в браузере String, но этого не происходит.
Вопросы:
Неправильная конфигурация в RequestMapping или в теле метода нужно еще что-то прописать?
В чем моя недоработка?
Вот вариант кода:
import com.squareup.okhttp.OkHttpClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;
@RestController
public class Places { /*OkHttpClient client = new OkHttpClient(); String a;*/
@RequestMapping(value = "https://api.parse.com/1/classes/Place", method = RequestMethod.GET, headers = {"Content-Type = application/json", "X-Parse-Application-Id = /*my app-id*/", "X-Parse-REST-API-Key = /*my app-secret*/"}) public String getting(){ /*Request request = new Request.Builder() .url("https://api.parse.com/1/classes/Place") .addHeader("Content-Type", "application/json") .addHeader("X-Parse-Application-Id", "app-id") .addHeader("X-Parse-REST-API-Key", "app-secret") .build();
Response response = client.newCall(request).execute(); a = response.body().string();
return a;*/ return "getting"; }
}


Ответ

Аннотация @RequestMapping говорит Spring-у, что отмеченный ей метод будет обрабатывать HTTP запрос от внешнего клиента. У вас же в этой аннотации указаны параметры чужого сервера и заголовки, как будто вы подразумевали подключение вашего сервера к другому серверу по HTTP.
Поле value должно указывать относительный путь на вашем сервере, который будет обрабатываться этим методом.
В поле headers указываются названия заголовков (без значений), которые должны присутствовать, чтобы запрос был обработан. Сами значения можно передать в метод параметром с аннотацией @RequestHeader
Для примера посмотрим на фрагмент кода:
@RestController public class Places {
@RequestMapping(value = "/classes/Place", method = RequestMethod.GET, headers = {"X-Parse-Application-Id", "X-Parse-REST-API-Key"}) public String getting(@RequestHeader("id") String id, @RequestHeader("key") String key){
return "getting"; } }
Объявлен контроллер Places c одним методом getting(). Этот метод будет вызван, если пользователь обратится HTTP-методом GET по URL вида http://ваш_сервер/ваш_путь_развертывания/classes/Place и при этом передаст HTTP заголовки X-Parse-Application-Id и X-Parse-REST-API-Key.

Если вы хотите из Spring MVC приложения подключиться к другому REST-сервису посмотрите на RestTemplate. Для вашего случая это будет выглядеть как-то так:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders(); headers.set("X-Parse-Application-Id", myAppId); headers.set("X-Parse-REST-API-Key", myAppSecret); HttpEntity entity = new HttpEntity("", headers);
ResponseEntity result = restTemplate.exchange("https://api.parse.com/1/classes/Place", HttpMethod.GET, entity, String.class);

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

Отправить комментарий