![](/img/trans.png)
[英]How to use RestTemplate for a POST request for a complex body in Java?
[英]Java RestTemplate how to POST with body
我需要有关在 RestController 中使用 RestTemplate 发布 json 主体的正确方法的一些帮助。 我只是对自己做错了什么还不够熟悉。 我花了很多时间来研究这个,但我没有得到我需要的结果。 希望我提供的信息很清楚。 截至目前,我只是想将 JSON 主体发布到下面的 URL API
CONTROLLER
@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 柱体
{
"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();
}
然后将其自动连接到您的 Controller class
@Autowired
private RestTemplate myRestTemplate;
确保 Jackson 库存在于类路径中。 尝试使用 myRestTemplate.postForObject()。 这没什么。 如果您仍然遇到问题,请尝试分析堆栈跟踪,您会得到一些提示。
由于 spring 启动自动配置RestTemplate
和ObjectMapper
以在您的@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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.