可以使用 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 上提供了一个带有发送方(可能不是一个好名字..它是带有问候端点的项目)和接收方(使用问候端点的项目)的示例项目