可以使用 RestTemplate PUT 传递我自己的对象
Can pass my own object with RestTemplate PUT
我想构建一个小型 RESTful 服务,发送一个带有我创建的 class 对象 (MyObject) 的 PUT 请求,并获得只有状态的响应。
我的控制器:
@RestController
public class MyControler {
@RequestMapping(path = "/blabla/{id}", method = RequestMethod.PUT)
@ResponseBody
public ResponseEntity<String> putMethod (@PathVariable("id") Long id,
@RequestBody MyObject t) {
/*todo*/
return new ResponseEntity<String>(HttpStatus.OK);
}
我的测试应用
@SpringBootApplication
public class App {
public String httpPut(String urlStr) {
MyObject myObject = new MyObject(p,p,....);
URI url = null;
HttpEntity<MyObject> requestEntity;
RestTemplate rest = new RestTemplate();
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON);
headers.setAccept(list);
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Content-Type", "application/json");
requestEntity = new HttpEntity<Transaction>(t, headers);
ResponseEntity<String> response =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
return response.getStatusCode().getValue();
}
我得到一个 HttpClientErrorException: 400 Bad Request
我的错误在哪里?我想要的是 Spring 自动序列化 MyObject。 MyObject class 正在实现可序列化。
我想念什么?
}
尝试这样做:
ResponseEntity<MyObject> responseSerialized =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
也许你做的太多了?
您是否尝试通过邮递员或类似方式将对象作为 json 放置?如果有,回应是什么?
尽管如此,我创建了一个通过 Springs RestTemplate 使用服务的最小示例。
这是获取自定义对象并通过 RestTemplate 放置自定义对象所需的全部代码
public void doTransfer(){
String url = "http://localhost:8090/greetings";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Greeting> greeting = restTemplate.getForEntity(url, Greeting.class);
LOGGER.info(greeting.getBody().getValue());
Greeting myGreeting = new Greeting();
myGreeting.setValue("Hey ho!");
HttpEntity<Greeting> entity = new HttpEntity<Greeting>(myGreeting);
restTemplate.exchange(url, HttpMethod.PUT, entity, Greeting.class);
}
我在 Github 上提供了一个带有发送方(可能不是一个好名字..它是带有问候端点的项目)和接收方(使用问候端点的项目)的示例项目
我想构建一个小型 RESTful 服务,发送一个带有我创建的 class 对象 (MyObject) 的 PUT 请求,并获得只有状态的响应。
我的控制器:
@RestController
public class MyControler {
@RequestMapping(path = "/blabla/{id}", method = RequestMethod.PUT)
@ResponseBody
public ResponseEntity<String> putMethod (@PathVariable("id") Long id,
@RequestBody MyObject t) {
/*todo*/
return new ResponseEntity<String>(HttpStatus.OK);
}
我的测试应用
@SpringBootApplication
public class App {
public String httpPut(String urlStr) {
MyObject myObject = new MyObject(p,p,....);
URI url = null;
HttpEntity<MyObject> requestEntity;
RestTemplate rest = new RestTemplate();
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON);
headers.setAccept(list);
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Content-Type", "application/json");
requestEntity = new HttpEntity<Transaction>(t, headers);
ResponseEntity<String> response =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
return response.getStatusCode().getValue();
}
我得到一个 HttpClientErrorException: 400 Bad Request
我的错误在哪里?我想要的是 Spring 自动序列化 MyObject。 MyObject class 正在实现可序列化。
我想念什么?
}
尝试这样做:
ResponseEntity<MyObject> responseSerialized =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
也许你做的太多了?
您是否尝试通过邮递员或类似方式将对象作为 json 放置?如果有,回应是什么?
尽管如此,我创建了一个通过 Springs RestTemplate 使用服务的最小示例。
这是获取自定义对象并通过 RestTemplate 放置自定义对象所需的全部代码
public void doTransfer(){
String url = "http://localhost:8090/greetings";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Greeting> greeting = restTemplate.getForEntity(url, Greeting.class);
LOGGER.info(greeting.getBody().getValue());
Greeting myGreeting = new Greeting();
myGreeting.setValue("Hey ho!");
HttpEntity<Greeting> entity = new HttpEntity<Greeting>(myGreeting);
restTemplate.exchange(url, HttpMethod.PUT, entity, Greeting.class);
}
我在 Github 上提供了一个带有发送方(可能不是一个好名字..它是带有问候端点的项目)和接收方(使用问候端点的项目)的示例项目