//get-uri: localhost:8080/test/pathVariable/123
@GetMapping(value = "pathVariable/{param}")
public String getPathVariable(@PathVariable("param") String id) {
return id;
}
//post-uri: localhost:8080/test/pathVariable/123
@PostMapping(value = "pathVariable/{param}")
public String postPathVariable(@PathVariable("param") String id) {
return id;
}
複製代碼
public static void pathVariable() {
Map<String, String> map = new HashMap<>();
map.put("paramName", "name1");
RestTemplate restTemplate = new RestTemplate();
//get調用使用getForEntity
ResponseEntity<String> responseEntity = restTemplate.getForEntity(host+"/test/pathVariable/{paramName}", String.class, map);
//post須要用postForEntity方法調用
//ResponseEntity<String> responseEntity = restTemplate.postForEntity(host+"/test/pathVariable/{paramName}", null, String.class, map);
System.out.println("getPathVariable2: " + responseEntity.getBody());//輸出「name1」
}
複製代碼
//get-uri: localhost:8080/test/requestParam?param=xxx
@GetMapping(value = "test/requestParam")
public String getRequestParam(@RequestParam(defaultValue = "ssss") String param) {
//當請求url爲localhost:8080/test/requestParam時,param爲默認值ssss
//post-uri: localhost:8080/test/requestParam?param=xxx
@PostMapping(value = "test/requestParam")
public String getRequestParam(@RequestParam(name = "aa", required = false) String param) {
//指定參數爲「aa」,即當url爲localhost:8080/test/requestParam?aa=p1時,param爲p1
//當url爲localhost:8080/test/requestParam時,param爲null
//post-uri: localhost:8080/test/requestParam
@PostMapping(value = "test/requestParam")
public String postRequestParam(@RequestParam(required = false) int param) {
// int是基本類型,即便設置required=false,由於int沒法設置爲null仍然會報錯,能夠將int替換爲Integer
複製代碼
public static void requestParam() {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(host+"/test/requestParam",
String.class);
System.out.println("getRequestParam: " + responseEntity.getBody());//url未指定,默認值爲ssss
Map<String, String> map = new HashMap<>();
map.put("param", "name3");
responseEntity = restTemplate.getForEntity(host+"/test/requestParam?param={param}", String.class);
System.out.println("getRequestParam: " + responseEntity.getBody());//輸出name3
}
public static void requestParam2() {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.postForEntity(host+"/test/requestParam",
String.class);
System.out.println("postRequestParam: " + responseEntity.getBody());//未指定aa,輸出結果爲null
}
複製代碼
//get-uri: localhost:8080/test/requestBody
@GetMapping(value = "test/requestBody")
public BaseParam getRequestBody(@RequestBody BaseParam param) {
return param;
}
//post-uri: localhost:8080/test/requestBody
@PostMapping(value = "test/requestBody")
public BaseParam postRequestBody(@RequestBody BaseParam param) {
return param;
}
複製代碼
//get請求
//RestTemplate的get請求不支持設置body,因此使用restTemplate沒法調用get請求的@RequestBody註解,但使用PostMan等工具是能夠發送帶body的get請求的
//post請求
public static void postRequestBody() {
HttpHeaders requestHeaders = new HttpHeaders();
//注意設置content-type
requestHeaders.add("Content-type", MediaType.APPLICATION_JSON_VALUE);
BaseParam param = new BaseParam();
param.setParamName("name4");
HttpEntity<BaseParam> requestEntity = new HttpEntity<>(param, requestHeaders);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<BaseParam> responseEntity = restTemplate.postForEntity(host+"/test/requestBody",
requestEntity, BaseParam.class);
System.out.println("postRequestBody: " + responseEntity.getBody().getParamName());//輸出name4
}
複製代碼
@PostMapping(value = "test/modelAttribute")
public String postModelAttribute(@ModelAttribute BaseParam param) {
return param.getParamName();
}
複製代碼
public static void postModelAttribute() {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
params.add("account", "用戶名");
params.add("paramName", "123456");
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, requestHeaders);
RestTemplate restTemplate = new RestTemplate();
//須要提供自定義convert
restTemplate.getMessageConverters().add(new TestMappingJackson2HttpMessageConverter());
ResponseEntity<String> responseEntity = restTemplate.postForEntity(host+"/test/modelAttribute",
requestEntity, String.class);
System.out.println("postModelAttribute: " + responseEntity.getBody());//輸出123456
}
//自定義convert
public class TestMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public TestMappingJackson2HttpMessageConverter() {
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
//添加form-urlencoded類型轉換
mediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
setSupportedMediaTypes(mediaTypes);
}
}
複製代碼
以上對@PathVariable、@RequestParam、@RequestBody、@ModelAttribute的使用方式及RestTemplate如何調用相應註解接口作了總結,若有不對歡迎指出,謝謝!java
歡迎掃碼關注我微信公衆號:magicTan。json