首页 > 解决方案 > 可以在请求中传递自定义对象并在帖子中接收响应为“*/*”(Mediatype.ALL_VALUE)

问题描述

我正在尝试使用restTemplate.Request 触发restApi。Request 接受json(我为此创建了一个自定义对象)并将响应作为“ / ” mediaType 发送。

预期要求:

{
"domainObject" :{
    "amount" : "1230798F",
    "business" : "n/a",
    "productGroup" : "n/a",
    "productType" : "n/a",
    "balanceType" : "n/a", 
    "balanceSubType" : "n/a"       
},
   "uniqueId" : "test1",
    "userId" : "user1"
}

我的 DTO:

@Entity
@AllArgsConstructor
class DomainObject(){
   private Float amount;
   private String business;
   private String productGroup;
   private String productType;
   private String balanceType;
   private String balanceSubType;

}

@Entity
@AllArgsConstructor
class PayloadObject(){

   @Autowired
   private DomainObject domainObject;

   private String uniqueId;
   private String userId;
}

public void testRestTemplate(){
PayloadObject obj = new PayloadObject(domainObject, "test-1", "abc");
RestTemplate restTemplate = new RestTemplate();
String url = "https://dev-test";

}

您能否指导我如何在这种情况下使用 restTemplate,任何帮助将不胜感激。

Edit1:当我尝试使用以下代码时:

//make the object
NewObject obj = new NewObject();
obj.setStuff("stuff");

//set your headers
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

//set your entity to send
HttpEntity entity = new HttpEntity(obj,headers);

// send it!
ResponseEntity<String> out = restTemplate.exchange("url", HttpMethod.POST, entity
    , String.class);`

它抛出一个错误,说“对象和内容类型“应用程序/json”没有 HttpMessageConverter

Edit2:我尝试添加 messageConverter 如下:

List<HttpMessageConverter<?>> msgConverter = new ArrayList<HttpMessageConverter<?>>
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportMediaType(Collections.singletonList(MediaType.ALL));
msgConverter.add(converter);
restTemplate.setMessageConverters(msgConverter);

但它仍然给出了同样的错误。我想知道我是否需要编写自定义消息转换器?有人可以帮助我了解我是否走在正确的道路上。

标签: spring-bootpostresttemplate

解决方案


重调类型应该是 PayloadObject 而不是 String 类型。

ResponseEntity<PayloadObject> out = restTemplate.exchange("url", HttpMethod.POST, entity
, PayloadObject.class);

推荐阅读