如何在Java中使用REST

使用Java工具,

wscompile for RPC wsimport for Document etc.. 

我可以使用WSDL生成命中SOAP Web服务所需的存根和类。

但我不知道如何在REST中做同样的事情。 如何获取命中REST Web服务所需的Java类。 无论如何,打击服务的方式是什么?

有谁能告诉我的方式?

您可以使用HttpURLConnection 。 下面是使用Java SE API(包括JAXB)调用RESTful服务的示例:

 String uri = "http://localhost:8080/CustomerService/rest/customers/1"; URL url = new URL(uri); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/xml"); JAXBContext jc = JAXBContext.newInstance(Customer.class); InputStream xml = connection.getInputStream(); Customer customer = (Customer) jc.createUnmarshaller().unmarshal(xml); connection.disconnect(); 

你可以在这里找到完整的例子

正如其他人所说,您可以使用较低级别的HTTP API执行此操作,也可以使用更高级别的JAXRS API将服务作为JSON使用。 例如:

 Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://host:8080/context/rest/method"); JsonArray response = target.request(MediaType.APPLICATION_JSON).get(JsonArray.class); 

工作示例试试这个:)

 package restclient; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class NetClientGet { public static void main(String[] args) { try { URL url = new URL("http://localhost:3002/RestWebserviceDemo/rest/json/product/dynamicData?size=5");//your url ie fetch data from . HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json"); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP Error code : " + conn.getResponseCode()); } InputStreamReader in = new InputStreamReader(conn.getInputStream()); BufferedReader br = new BufferedReader(in); String output; while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { System.out.println("Exception in NetClientGet:- " + e); } } } 

只需使用正确的查询字符串或请求正文对所需的URL发出http请求即可。

例如,您可以使用java.net.HttpURLConnection然后通过connection.getInputStream() ,然后covnert到您的对象。

在spring,有一个restTemplate ,使它更容易一点。

看看泽西岛 。 同样,REST就是数据。 这是一个教程

如果您还需要转换作为服务调用响应的xml字符串,则需要的x对象可以按如下方式执行:

 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXB; import javax.xml.bind.JAXBException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.CharacterData; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class RestServiceClient { // http://localhost:8080/RESTfulExample/json/product/get public static void main(String[] args) throws ParserConfigurationException, SAXException { try { URL url = new URL( "http://localhost:8080/CustomerDB/webresources/co.com.mazf.ciudad"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/xml"); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream()))); String output; Ciudades ciudades = new Ciudades(); System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println("12132312"); System.err.println(output); DocumentBuilder db = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(output)); Document doc = db.parse(is); NodeList nodes = ((org.w3c.dom.Document) doc) .getElementsByTagName("ciudad"); for (int i = 0; i < nodes.getLength(); i++) { Ciudad ciudad = new Ciudad(); Element element = (Element) nodes.item(i); NodeList name = element.getElementsByTagName("idCiudad"); Element element2 = (Element) name.item(0); ciudad.setIdCiudad(Integer .valueOf(getCharacterDataFromElement(element2))); NodeList title = element.getElementsByTagName("nomCiudad"); element2 = (Element) title.item(0); ciudad.setNombre(getCharacterDataFromElement(element2)); ciudades.getPartnerAccount().add(ciudad); } } for (Ciudad ciudad1 : ciudades.getPartnerAccount()) { System.out.println(ciudad1.getIdCiudad()); System.out.println(ciudad1.getNombre()); } conn.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static String getCharacterDataFromElement(Element e) { Node child = e.getFirstChild(); if (child instanceof CharacterData) { CharacterData cd = (CharacterData) child; return cd.getData(); } return ""; } } 

请注意,我在示例中预期的xml结构如下:

 1BOGOTA 

从您的问题不清楚您是否使用任何框架。对于REST,您将获得WADL和Apache CXF最近添加了对WADL的第一次REST服务开发的支持。请访问http://cxf.apache.org/docs /index.html

JAX-RS,但您也可以使用标准Java附带的常规DOM

您可以使用RestTemplate.class在Spring中使用Restful Web服务。

示例:

 public class Application { public static void main(String args[]) { RestTemplate restTemplate = new RestTemplate(); ResponseEntity call= restTemplate.getForEntity("http://localhost:8080/SpringExample/hello"); System.out.println(call.getBody()) } } 

参考

Apache Http Client API非常常用于调用HTTP Rest服务。

以下是使用HTTP GET调用的示例之一。

 import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.HttpClientBuilder; public class CallHTTPGetService { public static void main(String[] args) throws ClientProtocolException, IOException { HttpClient client = HttpClientBuilder.create().build(); HttpUriRequest httpUriRequest = new HttpGet("URL"); HttpResponse response = client.execute(httpUriRequest); System.out.println(response); } } 

如果使用Maven项目,请使用以下maven依赖项。

  org.apache.httpcomponents httpclient 4.5.1    org.apache.httpcomponents httpmime 4.5.1  

它只是一行代码。

 import org.springframework.web.client.RestTemplate; RestTemplate restTemplate = new RestTemplate(); YourBean obj = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", YourBean.class); 

参考。 Spring.io消费rest