Java RestTemplate如何发布正文
我需要一些帮助,以正确的方式在RestController中发布带有RestTemplate的json正文。我只是不太了解我做错了什么。我花了太多的时间研究这个问题,但我没有得到我需要的结果。希望我提供的信息是清楚的。现在我只是想把JSON主体发布到下面的URL API中 控制器Java RestTemplate如何发布正文,java,spring-boot,resttemplate,spring-restcontroller,Java,Spring Boot,Resttemplate,Spring Restcontroller,我需要一些帮助,以正确的方式在RestController中发布带有RestTemplate的json正文。我只是不太了解我做错了什么。我花了太多的时间研究这个问题,但我没有得到我需要的结果。希望我提供的信息是清楚的。现在我只是想把JSON主体发布到下面的URL API中 控制器 @RestController @RequestMapping("/api/feedback") public class FeedbackController { private final
@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();
}
exchange
是低级方法,更具体的方法通常更友好,只要它们涵盖您的用例。您正在查找postForObject
(postForEntity
,如果需要标题):
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自动配置
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)
}
}
@RestController
@请求映射(“/api/feedback”)
公共类反馈控制器{
@自连线专用馈线;
@邮戳(“/”)
公共响应事件报告(
@请求主体意外事件报告(意外事件报告)
{
log.info(“创建事件报告{}”,incidentReport);
var createdIncidentReport=feedbackFacade.create(incidentReport);
log.info(“创建的事件报告:{}”,createdIncidentReport);
返回新的ResponseEntity(CreatedInCidEnterport,HttpStatus.CREATED)
}
}
你能添加你得到的输出/错误吗?@Thirumal它返回一个空记录:{}数组,就好像它没有接受帖子正文一样。如果我使用相同的JSON主体将API URL添加到postman中,它就可以正常工作。但是当我尝试使用我的请求映射POST calldumb问题时,这不起作用,但我的incidentObject会是什么…?@RobDePietro你说过你要使用RestTemplate
发布一些东西。第一个参数是url第二个参数是Java对象映射自你的请求Json,你想发布第三个参数是你的响应类型期待接到电话service@chrylis-谨慎乐观-http post调用提供的post json post正文不是我的incidentObject吗?@RobDePietro您可能混淆了RestTemplate
的角色吗?它的工作是让您对一些API进行HTTP调用;如果您正在处理传入的HTTP呼叫,那么这不是您需要的工具。
@Autowired
private RestTemplate myRestTemplate;
@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)
}
}