Json 可以通过RestTemplate PUT传递我自己的对象

Json 可以通过RestTemplate PUT传递我自己的对象,json,rest,spring-boot,resttemplate,Json,Rest,Spring Boot,Resttemplate,我想构建一个小型的RESTful服务,用我创建的类(MyObject)的对象发送PUT请求,并获得一个只有状态的响应 我的控制者: @RestController public class MyControler { @RequestMapping(path = "/blabla/{id}", method = RequestMethod.PUT) @ResponseBody public ResponseEntity<String> putMethod (@PathVariab

我想构建一个小型的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);
}
@RestController
公共类mycontroller{
@RequestMapping(path=“/blabla/{id}”,method=RequestMethod.PUT)
@应答器
公共响应属性putMethod(@PathVariable(“id”)长id,
@请求主体(对象t){
/*待办事项*/
返回新的响应状态(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();
}
@springboot应用程序
公共类应用程序{
公共字符串httpPut(字符串urlStr){
MyObject MyObject=新的MyObject(p,p,…);
uriurl=null;
HttpEntity请求实体;
RestTemplate rest=新建RestTemplate();
添加(新的MappingJackson2HttpMessageConverter());
HttpHeaders=新的HttpHeaders();
列表=新的ArrayList();
添加(MediaType.APPLICATION_JSON);
headers.setAccept(列表);
headers.setContentType(MediaType.APPLICATION_JSON);
添加(“内容类型”、“应用程序/json”);
requestEntity=新的HttpEntity(t,头);
反应性反应=
交换(url,HttpMethod.PUT,requestEntity,MyObject.class);
返回响应。getStatusCode().getValue();
}
我收到一个
HttpClientErrorException:400错误请求
我的错误在哪里?我想要的是Spring自动序列化MyObject。MyObject类正在实现serializable。
我错过了什么

}尝试这样做:

ResponseEntity<MyObject> responseSerialized =
                rest.exchange(url, HttpMethod.PUT, requestEntity, MyObject.class);
ResponseEntity responseSerialized=
交换(url,HttpMethod.PUT,requestEntity,MyObject.class);

也许你做得太多了

您是否尝试通过postman或类似的方式将对象作为json?如果是,响应是什么

尽管如此,我还是创建了一个通过SpringRestTemplate使用服务的最小示例

这是获取自定义对象和通过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);

}
public void doTransfer(){
字符串url=”http://localhost:8090/greetings";
RestTemplate RestTemplate=新RestTemplate();
ResponseEntity greeting=restemplate.getForEntity(url,greeting.class);
LOGGER.info(greeting.getBody().getValue());
问候语myGreeting=新问候语();
myGreeting.setValue(“嘿嘿!”);
HttpEntity=新的HttpEntity(myGreeting);
交换(url,HttpMethod.PUT,实体,Greeting.class);
}

我在

!!上提供了一个示例项目,其中有一个发送者(可能不是一个好名字..这是一个有问候语端点的项目)和一个接收者(使用问候语端点的项目)!上面发布的代码中有一个错误:requestEntity=new HttpEntity(t,Header);t是调用rest.exchange(..)时myObject对象URL仍然为空…对不起,我忘了跳过我初始化URL的那一行。到目前为止,我找到的解决方案是手动编写类将MyObject序列化为JSON并反序列化。但是我想知道是否有办法让srping引导和spring模板只通过注释来处理所有这些您不发送任何内容。您期待着吗一个
MyObject
类作为返回值,您不发送任何内容(如果您发送的是
事务
对象,而不是
MyObject
)。另外,Spring boot已经配置了转换器,您只需插入它们并创建
RestTemplate
。因此,您的代码非常复杂且有故障。