Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringRESTTemplate发送列表和获取列表_Java_Spring_Spring Boot_Resttemplate - Fatal编程技术网

Java SpringRESTTemplate发送列表和获取列表

Java SpringRESTTemplate发送列表和获取列表,java,spring,spring-boot,resttemplate,Java,Spring,Spring Boot,Resttemplate,我想使用Spring的RestTemplate进行服务,在我的服务端,代码如下: @PostMapping(path="/savePersonList") @ResponseBody public List<Person> generatePersonList(@RequestBody List<Person> person){ return iPersonRestService.generatePersonList(person); } 使用此解决方案,服务器

我想使用Spring的
RestTemplate
进行服务,在我的服务端,代码如下:

@PostMapping(path="/savePersonList")
@ResponseBody
public List<Person> generatePersonList(@RequestBody List<Person> person){
    return iPersonRestService.generatePersonList(person);
}

使用此解决方案,服务器无法获取对象并引发异常,正确的方法是什么?

检查您的代码是否如下所示。这应该行得通

//header
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//person list
List<Person> personList = new ArrayList<Person>();
Person person = new Person();
person.setName("UserOne");  
personList.add(person);
//httpEnitity       
HttpEntity<Object> requestEntity = new HttpEntity<Object>(personList,headers);
ResponseEntity<List<Person>> rateResponse = restTemplate.exchange(url, HttpMethod.POST, requestEntity,new ParameterizedTypeReference<List<Person>>() {});
//头
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//人员名单
List personList=新建ArrayList();
Person=新人();
person.setName(“UserOne”);
personList.add(person);
//高温性能
HttpEntity requestEntity=新的HttpEntity(personList,Header);
ResponseEntity rateResponse=restTemplate.exchange(url,HttpMethod.POST,requestEntity,新参数化类型引用(){});

这可能会对您有所帮助

  List<Integer> officialIds = null;
  //add values to officialIds 
  RestTemplate restTemplate = new RestTemplate();

  HttpHeaders headers = new HttpHeaders();

  HttpEntity<List<Integer>> request = new HttpEntity<List<Integer>>(officialIds, 
    headers);

  ResponseEntity<YourResponseClass[]> responses = 
  restTemplate.postForEntity("your URL", request , YourResponseClass[].class );

  List<YourResponseClass> list = Arrays.asList(responses.getBody());
List officialIds=null;
//为官方文件添加值
RestTemplate RestTemplate=新RestTemplate();
HttpHeaders=新的HttpHeaders();
HttpEntity请求=新的HttpEntity(官方ID,
标题);
响应性响应=
postForEntity(“您的URL”、请求、响应类[].class);
List=Arrays.asList(responses.getBody());

我也遇到过类似的挑战,这是我的2美分

我的带有POST映射的控制器类

@PostMapping("/fetch/projects")
public ResponseEntity<List<Project>> getAllProjects(@RequestBody List<UserProject> userProject) {
    
    // Convert List of projectIds to List of Long using Lambda Functions
    List<Long> projectIds = userProject.stream().map(UserProject::getProjectId).collect(Collectors.toList());
    
    List<Project> projectList = projectService.getAllProjectsByProjectIds(projectIds);
    
    log.info("<< Fetching Projects based on Project Ids !");
    
    return new ResponseEntity<List<Project>>(projectList, HttpStatus.OK);
}
我的呼叫服务

protected List<Project> getProjectsByIds(List<UserProject> userProject) {

    String url = projectBaseUri;
    log.info("Project URL : " + url);

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    
    HttpEntity<Object> requestEntity = new HttpEntity<Object>(userProject,headers);

    ResponseEntity<List<Project>> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity,new ParameterizedTypeReference<List<Project>>() {});

    return response.getBody();
}
受保护的列表getProjectsByIds(列表用户项目){
字符串url=projectBaseUri;
log.info(“项目URL:+URL”);
HttpHeaders=新的HttpHeaders();
setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity requestEntity=新的HttpEntity(用户项目,标题);
ResponseEntity response=restemplate.exchange(url,HttpMethod.POST,requestEntity,新参数化类型引用(){});
返回response.getBody();
}

正确的方法是,
@Autowired
RestTemplate类并使用它,而不是每次都创建新对象..我认为您不理解我的问题,然后发布堆栈跟踪…请显示异常和完整堆栈跟踪我遇到了相同的问题,我使用objectMapper将模型转换为字符串这很有效,但是PostForObject和exchange之间的区别是什么?在PostForObject中,我们不需要将requestEntity强制转换为HttpEntity,但在exchange中,我们必须这样做。PostForObject方法调用的确切错误是什么?如果你通过ArrayList“personList”,正如我在上面的回答中所说的,这应该是有效的。List rateResponse=restTemplate.postForObject(url、personList、List.class);没有错误,但当i user postForObject时,Rate响应将不是列表,而是LinkedHashMap。您的服务将返回列表,然后返回如何响应LinkedHashMap。我不明白。请您详细说明一下。当我检查服务的响应时,请理解这一点,它不是没有强制转换的列表;无需使用Arrays.asList强制转换
@PostMapping("/fetch/projects")
public ResponseEntity<List<Project>> getAllProjects(@RequestBody List<UserProject> userProject) {
    
    // Convert List of projectIds to List of Long using Lambda Functions
    List<Long> projectIds = userProject.stream().map(UserProject::getProjectId).collect(Collectors.toList());
    
    List<Project> projectList = projectService.getAllProjectsByProjectIds(projectIds);
    
    log.info("<< Fetching Projects based on Project Ids !");
    
    return new ResponseEntity<List<Project>>(projectList, HttpStatus.OK);
}
final String projectBaseUri = "http://localhost:6013/api/v1/project/fetch/projects";
protected List<Project> getProjectsByIds(List<UserProject> userProject) {

    String url = projectBaseUri;
    log.info("Project URL : " + url);

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    
    HttpEntity<Object> requestEntity = new HttpEntity<Object>(userProject,headers);

    ResponseEntity<List<Project>> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity,new ParameterizedTypeReference<List<Project>>() {});

    return response.getBody();
}