Json 可以通过RestTemplate PUT传递我自己的对象
我想构建一个小型的RESTful服务,用我创建的类(MyObject)的对象发送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
@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
。因此,您的代码非常复杂且有故障。