Поставлена задача, с веб-сервиса вытащить 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
ResponseEntity
Комментариев нет:
Отправить комментарий