Java RestTemplate如何使用主体POST



我需要一些帮助,以正确的方式在RestController中使用RestTemplate POST json主体。我只是对自己做错了什么还不够熟悉。我花了很多时间研究这个问题,但我没有得到我需要的结果。希望我提供的信息是清楚的。到目前为止,我只是试图将JSON主体发布到下面的URL API

控制器

@RestController
@RequestMapping("/api/feedback")
public class FeedbackController {
private final RestTemplate restTemplate;
@Autowired
public FeedbackController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}

@RequestMapping(          
method = RequestMethod.POST
)
public IncidentReport createIncident()      
{  

return restTemplate.exchange(
"URL_API/create",
HttpMethod.POST, null,
new ParameterizedTypeReference<IncidentReport>(){}

).getBody();
} 

JSON POST BODY

{
"group": "my_group",
"short_description":"this is a test for the short description",
"contact_type":"Alert",
}

exchange是低级方法,只要涵盖了您的用例,更具体的方法通常更友好。您正在寻找postForObject(如果需要标头,则为postForEntity(:

return restTemplate.postForObject(url, incidentObject, IncidentReport.class);

StackTrace会更有帮助。我认为您应该以以下方式实例化RestTemplate。

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
.setConnectTimeout(Duration.ofMillis(3000))
.setReadTimeout(Duration.ofMillis(3000))
.build();
}

然后在控制器类中自动布线

@Autowired
private RestTemplate myRestTemplate;

确保类路径中存在Jackson库。尝试使用myRestTemplate.postForObject((。没有太多内容。如果您仍然遇到问题,请尝试分析堆栈跟踪,您会得到一些提示。

由于spring-boot自动配置RestTemplateObjectMapper以在@RestController端点中序列化/反序列化,因此您根本不必坚持使用RestTemplate,并且可以使用以下代码片段中显示的功能:

@RestController
@RequestMapping("/api/feedback")
public class FeedbackController {
@Autowired private FeedbackFacade feedbackFacade;
@PostMapping("/")
public ResponseEntity<IncidentReport> createIncidentReport(
@RequestBody IncidentReport incidentReport)
{
log.info("Create incident report {}", incidentReport);
var createdIncidentReport = feedbackFacade.create(incidentReport);
log.info("Created incident report: {}", createdIncidentReport);
return new ResponseEntity<>(createdIncidentReport, HttpStatus.CREATED)
}
}

最新更新