我想构建一个小型RESTful服务,使用我创建的类的对象(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类正在实现可序列化。
我错过了什么?
}
答案 0 :(得分:4)
也许你做的很多?
您是否尝试通过邮递员或类似方式将对象作为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
答案 1 :(得分:0)
尝试这样做:
ResponseEntity<MyObject> responseSerialized =
rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);