Spring遠隔呼び出しツール類RestTemplateUtils
39871 ワード
比較的完全なSpring遠隔呼び出しツールの種類のRestTemplateUtilsを発見しました.記録してください.
Springリモート起動Resetサービスツール類は、Get、Post、Put、Deleteの4つの呼び出し方式を含みます.
依存jar
springプロジェクトであれば、以下の依存性が必要です.
パッケージが多すぎて、必要に応じて選別できます.新規Mavenプロジェクトtest-server pom.xml TestServer Starter.java Person.java UploadConfig.java TestController.java はTestServer Starter.javaを実行し、テストサーバを起動する. 追加
要求方式はpostで、Content-Type=aplication/x-wn-form-urlencoded
Springリモート起動Resetサービスツール類は、Get、Post、Put、Deleteの4つの呼び出し方式を含みます.
依存jar
springプロジェクトであれば、以下の依存性が必要です.
org.springframework
spring-context
5.0.9.RELEASE
org.springframework
spring-web
5.0.9.RELEASE
スプリングブックプロジェクトなら、以下の依存を加えればいいです.
org.springframework.boot
spring-boot-starter-web
ツールパッケージのRestTemplateUtils.javaパッケージが多すぎて、必要に応じて選別できます.
import java.util.Map;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
/**
* RestTemplate
*
* @author Logan
* @createDate 2019-02-08
*
*/
public class RestTemplateUtils {
private static final RestTemplate restTemplate = new RestTemplate();
// ----------------------------------GET-------------------------------------------------------
/**
* GET
*
* @param url URL
* @param responseType
* @return ResponseEntity
*/
public static ResponseEntity get(String url, Class responseType) {
return restTemplate.getForEntity(url, responseType);
}
/**
* GET
*
* @param url URL
* @param responseType
* @param uriVariables URL ,
* @return ResponseEntity
*/
public static ResponseEntity get(String url, Class responseType, Object... uriVariables) {
return restTemplate.getForEntity(url, responseType, uriVariables);
}
/**
* GET
*
* @param url URL
* @param responseType
* @param uriVariables URL , Map key
* @return ResponseEntity
*/
public static ResponseEntity get(String url, Class responseType, Map uriVariables) {
return restTemplate.getForEntity(url, responseType, uriVariables);
}
/**
* GET
*
* @param url URL
* @param headers
* @param responseType
* @param uriVariables URL ,
* @return ResponseEntity
*/
public static ResponseEntity get(String url, Map headers, Class responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return get(url, httpHeaders, responseType, uriVariables);
}
/**
* GET
*
* @param url URL
* @param headers
* @param responseType
* @param uriVariables URL ,
* @return ResponseEntity
*/
public static ResponseEntity get(String url, HttpHeaders headers, Class responseType, Object... uriVariables) {
HttpEntity> requestEntity = new HttpEntity<>(headers);
return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables);
}
/**
* GET
*
* @param url URL
* @param headers
* @param responseType
* @param uriVariables URL , Map key
* @return ResponseEntity
*/
public static ResponseEntity get(String url, Map headers, Class responseType, Map uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return get(url, httpHeaders, responseType, uriVariables);
}
/**
* GET
*
* @param url URL
* @param headers
* @param responseType
* @param uriVariables URL , Map key
* @return ResponseEntity
*/
public static ResponseEntity get(String url, HttpHeaders headers, Class responseType, Map uriVariables) {
HttpEntity> requestEntity = new HttpEntity<>(headers);
return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables);
}
// ----------------------------------POST-------------------------------------------------------
/**
* POST
*
* @param url URL
* @param responseType
* @return
*/
public static ResponseEntity post(String url, Class responseType) {
return restTemplate.postForEntity(url, HttpEntity.EMPTY, responseType);
}
/**
* POST
*
* @param url URL
* @param requestBody
* @param responseType
* @return ResponseEntity
*/
public static ResponseEntity post(String url, Object requestBody, Class responseType) {
return restTemplate.postForEntity(url, requestBody, responseType);
}
/**
* POST
*
* @param url URL
* @param requestBody
* @param responseType
* @param uriVariables URL ,
* @return ResponseEntity
*/
public static ResponseEntity post(String url, Object requestBody, Class responseType, Object... uriVariables) {
return restTemplate.postForEntity(url, requestBody, responseType, uriVariables);
}
/**
* POST
*
* @param url URL
* @param requestBody
* @param responseType
* @param uriVariables URL , Map key
* @return ResponseEntity
*/
public static ResponseEntity post(String url, Object requestBody, Class responseType, Map uriVariables) {
return restTemplate.postForEntity(url, requestBody, responseType, uriVariables);
}
/**
* POST
*
* @param url URL
* @param headers
* @param requestBody
* @param responseType
* @param uriVariables URL ,
* @return ResponseEntity
*/
public static ResponseEntity post(String url, Map headers, Object requestBody, Class responseType, Object... uriVariables) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAll(headers);
return post(url, httpHeaders, requestBody, responseType, uriVariables);
}
/**
* POST
*
* @param url URL
* @param headers
* @param requestBody
* @param responseType
* @param uriVariables URL ,
* @return ResponseEntity
*/
public static ResponseEntity post(String url, HttpHeaders headers, Object requestBody, Class responseType, Object... uriVariables) {
HttpEntity
テストの例は以下の通りです
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import com.alibaba.fastjson.JSONObject;
import utils.RestTemplateUtils;
/**
* RestTemplate
*
* @author Logan
* @createDate 2019-02-08
*
*/
public class RestTest {
/**
* HTTPS
*/
@Test
public void test() {
String url = "https://www.cnblogs.com/{id}/p/{pageName}.html";
String id = "jonban";
List pages = new ArrayList<>();
pages.add("rest");
pages.add("jsoup");
pages.add("sms");
pages.add("rememberMe");
pages.add("properties");
pages.add("async");
for (String pageName : pages) {
ResponseEntity entity = RestTemplateUtils.get(url, String.class, id, pageName);
System.out.println(entity.getStatusCode());
System.out.println(entity.getBody());
}
}
/**
* Headers GET ,POST
*/
@Test
public void testHeaders() {
String url = "http://127.0.0.1:8080/test/Logan?age=16";
Map headers = new HashMap<>();
headers.put("appId", "Basic MyAppId");
ResponseEntity entity = RestTemplateUtils.get(url, headers, String.class);
System.out.println(entity.getStatusCode());
System.out.println(entity.getBody());
}
/**
* POST
*/
@Test
public void sayHello() {
String url = "http://127.0.0.1:8080/test/sayHello";
MultiValueMap requestBody = new LinkedMultiValueMap<>();
requestBody.add("name", "Logan");
requestBody.add("age", 12);
ResponseEntity response = RestTemplateUtils.post(url, requestBody, JSONObject.class);
System.out.println(response.getStatusCode());
System.out.println(response.getBody());
}
/**
* JSON Body POST
*/
@Test
public void sayHelloBody() {
String url = "http://127.0.0.1:8080/test/sayHelloBody";
JSONObject requestBody = new JSONObject();
requestBody.put("name", "Logan");
requestBody.put("age", 16);
ResponseEntity response = RestTemplateUtils.post(url, requestBody, JSONObject.class);
System.out.println(response.getStatusCode());
System.out.println(response.getBody());
}
/**
*
*/
@Test
public void uploadFile() {
String url = "http://127.0.0.1:8080/test/uploadFile";
MultiValueMap requestBody = new LinkedMultiValueMap<>();
requestBody.add("uploadPath", "G:\\Temp\\Test");
requestBody.add("file", new FileSystemResource("G:\\Java\\JavaStyle.xml"));
requestBody.add("file2", new FileSystemResource("G:\\Java\\jad.exe"));
ResponseEntity response = RestTemplateUtils.post(url, requestBody, JSONObject.class);
System.out.println(response.getStatusCode());
System.out.println(response.getBody());
}
@Test
public void downloadFile() {
try {
String url = "http://127.0.0.1:8080/test/downloadFile?filePath={filePath}&fileName={fileName}";
String filePath = "G:\\Java";
String fileName = "JavaStyle.xml";
ResponseEntity response = RestTemplateUtils.get(url, byte[].class, filePath, fileName);
System.out.println(response.getStatusCode());
System.out.println(response.getHeaders().getContentType());
// ,
if ("text/html;charset=UTF-8".equals(response.getHeaders().getContentType().toString())) {
System.out.println(new String(response.getBody(), "UTF-8"));
}
//
else {
File file = new File("G:\\Temp\\Test", fileName);
if (HttpStatus.OK.equals(response.getStatusCode())) {
FileUtils.writeByteArrayToFile(file, response.getBody());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* fastjson-1.2.56.jar
*/
@Test
public void downloadFile2() {
try {
String url = "http://central.maven.org/maven2/com/alibaba/fastjson/1.2.56/fastjson-1.2.56.jar";
ResponseEntity response = RestTemplateUtils.get(url, byte[].class);
System.out.println(response.getStatusCode());
// ,
File file = new File("G:\\Temp\\Test\\fastjson-1.2.56.jar");
if (HttpStatus.OK.equals(response.getStatusCode())) {
FileUtils.writeByteArrayToFile(file, response.getBody());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
リモートサーバインターフェースの例をテストします.
4.0.0
com.java
test-server
1.0.0
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
org.springframework.boot
spring-boot-starter-web
commons-fileupload
commons-fileupload
1.3.3
com.alibaba
fastjson
1.2.56
org.springframework
springloaded
1.2.8.RELEASE
org.springframework.boot
spring-boot-devtools
${project.artifactId}
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
UTF-8
org.springframework.boot
spring-boot-maven-plugin
repackage
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*
*
* @author Logan
* @createDate 2019-02-08
*
*/
@SpringBootApplication
public class TestServerStarter {
public static void main(String[] args) {
SpringApplication.run(TestServerStarter.class, args);
}
}
/**
*
*
* @author Logan
* @createDate 2019-02-08
*
*/
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
/**
*
*
* @author Logan
* @createDate 2019-02-08
*
*/
@Configuration
public class UploadConfig {
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
// 4GB
multipartResolver.setMaxUploadSize(4294967296l);
return multipartResolver;
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import com.java.entity.Person;
/**
*
*
* @author Logan
* @createDate 2019-02-08
*
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private HttpServletRequest request;
@GetMapping("/{name}")
public Person test(@PathVariable("name") String name, int age) {
String appId = request.getHeader("appId");
System.out.println("appId: " + appId);
Person person = new Person();
person.setName(name);
person.setAge(age);
System.out.println(person);
return person;
}
@PostMapping("/sayHello")
public Person sayHello(Person person) {
System.out.println(person);
return person;
}
@PostMapping("/sayHelloBody")
public Person sayHelloBody(@RequestBody Person person) {
System.out.println(person);
return person;
}
@RequestMapping("/uploadFile")
public Map uploadFile(@RequestParam(required = true) CommonsMultipartFile file, @RequestParam(required = true) CommonsMultipartFile file2, String uploadPath) {
Map result = new HashMap();
try {
//
File path = new File(uploadPath);
if (!path.isDirectory() || !path.exists()) {
path.mkdirs();
}
File outFile = new File(uploadPath, file.getOriginalFilename());
file.transferTo(outFile);
File outFile2 = new File(uploadPath, file2.getOriginalFilename());
file2.transferTo(outFile2);
List files = new ArrayList<>();
files.add(outFile.getAbsolutePath());
files.add(outFile2.getAbsolutePath());
result.put("successful", true);
result.put("files", files);
} catch (Exception e) {
e.printStackTrace();
result.put("successful", false);
result.put("msg", e.getMessage());
}
return result;
}
@GetMapping("/downloadFile")
public void downloadFile(HttpServletResponse response, String filePath, String fileName) {
File file = new File(filePath, fileName);
if (file.exists() && file.isFile()) {
try (
OutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream(file);
) {
// URL ,
fileName = URLEncoder.encode(fileName, "UTF-8");
// URLEncoder.encode "+", "%20",
fileName = fileName.replace("+", "%20");
// "+" URLEncoder.encode "%2B", "+", "+"
fileName = fileName.replace("%2B", "+");
response.setContentType("application/x-msdownload;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
IOUtils.copy(in, out);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//
else {
response.setContentType("text/html;charset=UTF-8");
try (
PrintWriter writer = response.getWriter();
) {
writer.write(" , !");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
要求方式はpostで、Content-Type=aplication/x-wn-form-urlencoded
JSONObject requestBody = JSONObject.parseObject(JSONObject.toJSONString(liveModel));
requestBody.add("catalogId");
requestBody.add("roomId");
requestBody.add("courseId");
ResponseEntity response = null;
try {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/x-www-form-urlencoded");
HttpEntity> r = new HttpEntity<>(getParamaters(requestBody), headers);
response = RestTemplateUtils.post(createRoom, r, JSONObject.class);
} catch (Throwable e) {
e.printStackTrace();
throw new ServiceException(e.getMessage());
}
Map retMap = JSONUtil.parseJSON2Map(Objects.requireNonNull(response.getBody()));
if (retMap.get("status") != "1") {
throw new ServiceException((String) retMap.get("message"));
}
Map payload = (Map) retMap.get("payload");
log.info(" payload:" + payload.toString());
private MultiValueMap getParamaters(JSONObject jsonObject) {
MultiValueMap postParameters = new LinkedMultiValueMap<>();
jsonObject.keySet().forEach(key -> postParameters.add(key, jsonObject.get(key)));
return postParameters;
}