【问题标题】:Sending a Post Request Throw 500 Internal error发送发布请求抛出 500 内部错误
【发布时间】:2020-05-16 05:00:42
【问题描述】:

每次我尝试发送 post 请求时,我都会收到 500 错误。通过 postman 发送请求也可以正常工作,因此服务器端没有问题。什么是错误?

控制器

package com.neostencil.services;

import com.neostencil.leadsquard.LeadCapture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

@Service
public class LeadSquardService {

  private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

  @Value("${leadsquard.accesskey}")
  private String access_key;

  @Value("${leadsquard.secretkey}")
  private String serect_key;

  /**
   * Create a New User in Lead Capture.
   * @param leadCapture
   * */
  public void createNewUserInLeadCapture(LeadCapture leadCapture) {

    MultiValueMap<String, String> mapdata = new LinkedMultiValueMap<>();
    mapdata.add("FirstName", leadCapture.getFirstName());
    mapdata.add("Phone", "");
    mapdata.add("EmailAddress", leadCapture.getEmailAddress());
    mapdata.add("mx_Courses", leadCapture.getMx_courses());


    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("hostUrl");
    builder.queryParam("accessKey" , access_key );
    builder.queryParam("secretKey", serect_key);


    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    //headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);

    try {
      HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<>(mapdata, headers);


      RestTemplate restTemplate = new RestTemplate();
      ResponseEntity<String> response = restTemplate.exchange(builder.build().toUriString(), HttpMethod.POST, requestEntity, String.class);

      HttpStatus statusCode = response.getStatusCode();
      if (statusCode == HttpStatus.ACCEPTED) {

        System.out.println("ResponseEntity : " + response.getBody());
      }
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}

PrintStackTrace

org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error
    at org.springframework.web.client.HttpServerErrorException.create(HttpServerErrorException.java:79)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:124)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:777)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578)
    at com.neostencil.services.LeadSquardService.createNewUserInLeadCapture(LeadSquardService.java:57)
    at ...

【问题讨论】:

  • 什么是打印 e.printStackTrace?
  • 看到这个 printStacktrace

标签: java json spring-boot http-post


【解决方案1】:

您可以尝试传递 JSON String

HttpEntity<String> requestEntity = new HttpEntity<>(new Gson().toJson(mapdata), headers);

更好的选择是创建一个 POJO 来映射请求。

HttpEntity<User> requestEntity = new HttpEntity<User>(user, headers);

【讨论】:

  • 发生同样的错误 org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error
猜你喜欢
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2022-11-01
  • 2018-08-03
  • 1970-01-01
相关资源
最近更新 更多