Spring Boot - 외부 인터페이스 방문
Spring - boot 프로젝트 개발 에 있어 서 이 모듈 의 코드 는 외부 모듈 인터페이스 나 외부 url 링크 에 접근 해 야 하 는 수요 가 존재 합 니 다. 예 를 들 어 외부 맵 API 나 날씨 API 를 호출 해 야 합 니 다.
가장 완전한 자바 백 엔 드 지식 체계https://www.pdai.tech, 매일 업데이트 중...
프로젝트 1: 네 이 티 브 Http 요청 사용
코드 에서 원생 http 요청 을 사용 합 니 다. 코드 는 다음 과 같 습 니 다.
@RequestMapping("/doPostGetJson")
public String doPostGetJson() throws ParseException {
// json
String jsonText = "{id:1}";
JSONObject json = (JSONObject) JSONObject.parse(jsonText);
JSONObject sr = this.doPost(json);
System.out.println(" :" + sr);
return sr.toString();
}
public static JSONObject doPost(JSONObject date) {
HttpClient client = HttpClients.createDefault();
//
String url = "http://192.168.1.101:8080/getJson";
HttpPost post = new HttpPost(url);
JSONObject jsonObject = null;
try {
StringEntity s = new StringEntity(date.toString());
s.setContentEncoding("UTF-8");
s.setContentType("application/json");
post.setEntity(s);
post.addHeader("content-type", "text/xml");
HttpResponse res = client.execute(post);
String response1 = EntityUtils.toString(res.getEntity());
System.out.println(response1);
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(res.getEntity());// json :
jsonObject = JSONObject.parseObject(result);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return jsonObject;
}
방안 2: Feign 으로 소비
1. maven 프로젝트 에 의존 도 를 추가 합 니 다.
org.springframework.cloud
spring-cloud-starter-feign
1.2.2.RELEASE
2. 인 터 페 이 스 를 작성 하여 service 층 에 배치 합 니 다.
여기 decisionEngine. url 은 properties 에 설 치 된 ip 주소 와 포트 번호 decisionEngine. url = 입 니 다.http://10.2.1.148:3333/decision/person 인터페이스 이름
@FeignClient(url = "${decisionEngine.url}",name="engine")
public interface DecisionEngineService {
@RequestMapping(value="/decision/person",method= RequestMethod.POST)
public JSONObject getEngineMesasge(@RequestParam("uid") String uid,@RequestParam("productCode") String productCode);
}
3. 자바 의 시작 클래스 에 @ EnableFeignClient 를 추가 합 니 다.
@EnableFeignClients //
@EnableDiscoveryClient
@SpringBootApplication
@EnableResourceServer
public class Application implements CommandLineRunner {
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
@Autowired
private AppMetricsExporter appMetricsExporter;
@Autowired
private AddMonitorUnitService addMonitorUnitService;
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
4. 코드 에서 인 터 페 이 스 를 호출 하면 됩 니 다.
@Autowired
private DecisionEngineService decisionEngineService ;
// ...
decisionEngineService.getEngineMesasge("uid" , "productCode");
방안 3: RestTemplate 방법 사용
Spring - boot 개발 에서 RestTemplate 역시 대외 방문 인터페이스 API 를 제 공 했 는데 여기 서 Get 과 Post 방법의 사용 을 소개 한다.Get 요청 은 두 가지 방식 의 인터페이스 getForObject 와 getForEntity 를 제공 합 니 다. getForEntity 는 다음 과 같은 세 가지 방법 을 제공 합 니 다.
Get 요청 -- getForEntity (Stringurl, Class responseType, Object... url Variables)
이 방법 은 세 개의 인 자 를 제공 합 니 다. 그 중에서 url 은 요청 한 주소 이 고 response Type 은 body 에 응답 하 는 포장 유형 입 니 다. url Variables 는 url 의 매개 변수 로 연결 되 어 있 습 니 다. 이 방법의 참고 호출 은 다음 과 같 습 니 다.
// http://USER-SERVICE/user?name={name)
RestTemplate restTemplate=new RestTemplate();
Map params=new HashMap<>();
params.put("name","dada"); //
ResponseEntity responseEntity=restTemplate.getForEntity("http://USERSERVICE/user?name={name}",String.class,params);
Get 요청 - getForEntity (URI url, Class responseType)
이 방법 은 URI 대상 을 사용 하여 이전 url 과 url Variables 인 자 를 대체 하여 방문 주소 와 인자 바 인 딩 을 지정 합 니 다.URI 는 JDK java. net 패키지 의 다음 클래스 로 통 일 된 자원 식별 자 (Uniform Resource Identifier) 인용 을 표시 합 니 다.다음 참조:
RestTemplate restTemplate=new RestTemplate();
UriComponents uriComponents=UriComponentsBuilder.fromUriString("http://USER-SERVICE/user?name={name}")
.build()
.expand("dodo")
.encode();
URI uri=uriComponents.toUri();
ResponseEntity responseEntity=restTemplate.getForEntity(uri,String.class).getBody();
Get 요청 -- getForObject
getForObject 방법 은 getForEntity 에 대한 추가 패키지 로 이해 할 수 있 습 니 다. HttpMessage ConverterExtractor 를 통 해 HTTP 요청 응답 체 body 내용 을 대상 으로 변환 하여 포 장 된 대상 내용 을 직접 되 돌려 달라 고 요청 합 니 다.getForObject 방법 은 다음 과 같 습 니 다.
getForObject(String url,Class responseType,Object...urlVariables)
getForObject(String url,Class responseType,Map urlVariables)
getForObject(URI url,Class responseType)
포스트 요청
Post 는 post ForEntity, post ForObject, post ForLocation 세 가지 방법 을 제공 해 달라 고 요청 했다.그 중에서 모든 방법 에는 세 가지 방법 이 존재 합 니 다. post ForEntity 방법 은 다음 과 같이 사용 합 니 다.
RestTemplate restTemplate=new RestTemplate();
User user=newUser("didi",30);
ResponseEntity responseEntity=restTemplate.postForEntity("http://USER-SERVICE/user",user,String.class); // body user , body String
String body=responseEntity.getBody();
post ForEntity 에는 다음 과 같은 세 가지 방법의 과부하 가 존재 합 니 다.
postForEntity(String url,Object request,Class responseType,Object... uriVariables)
postForEntity(String url,Object request,Class responseType,Map uriVariables)
postForEntity(URI url,Object request,Class responseType)
post ForEntity 의 다른 매개 변 수 는 getForEntity 의 매개 변수 와 대체적으로 같 습 니 다. 여기 서 소개 하지 않 습 니 다.
참고 문장
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.