可以使用RestTemplate PUT传递我自己的对象

时间:2016-01-09 18:25:37

标签: json rest spring-boot resttemplate

我想构建一个小型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类正在实现可序列化。 我错过了什么?

}

2 个答案:

答案 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);