2016-01-23 35 views
0

我正在研究管理教授保留的应用程序,它应该在使用WebServices的其他项目中使用不同的功能。 我有一个RestController,我在项目调用WSSpring和 这是它的代码。在两个不同的项目之间使用SpringTemplate进行POST

package org.icda.entry; 
import java.util.List; 
import org.icda.entry.entities.Professor; 
import org.icda.entry.professor.metier.IProfessorMetier; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
@RequestMapping("/Profs") 
public class ProfessorController { 

@Autowired 
private IProfessorMetier professorMetier; 

@RequestMapping(value = "/sortProfs", method = RequestMethod.GET) 
public List<Professor> sortPorfessors() { 
    return professorMetier.sortPorfessors(); 
} 

@RequestMapping(value = "/allProfs", method = RequestMethod.GET) 
public List<Professor> listAllProfessors() { 
    return professorMetier.listAllProfessors(); 
} 

@RequestMapping(value = "/findProf/{id}", method = RequestMethod.GET) 
public Professor findOne(@PathVariable Long id) { 
    return professorMetier.findOne(id); 
} 

@RequestMapping(value = "/saveProf", method = RequestMethod.POST) 
public Professor save(@RequestBody Professor p) { 
    return professorMetier.save(p); 
} 
} 

现在,我不得不作出这样的存在所谓WSSpringClient与RestController通信的其他项目我的客户端应用程序。 我开发了一个基于RestTemplate的解决方案。 这就是我的客户类的样子。

package org.icda.client.metier; 

import java.net.URI; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import org.springframework.web.client.RestTemplate; 

public class ProfessorClient implements IProfessorClient { 

public static final String REST_SERVICE_URI = "http://localhost:8080 /entry/Profs"; 

public static void main(String[] args) { 
    ProfessorClient professor = new ProfessorClient(); 
    professor.listAllProfessors(); 
    System.out.println("Sorting ....."); 
    professor.sortPorfessors(); 
    Object object = professor.findOne(2L); 
    System.out.println(object.toString()); 
} 

@SuppressWarnings("unchecked") 
@Override 
public List<Object> listAllProfessors() { 
    RestTemplate restTemplate = new RestTemplate(); 
    List<Object> objects = restTemplate.getForObject(REST_SERVICE_URI 
      + "/allProfs", List.class); 
    for (Object o : objects) { 
     System.out.println(o.toString()); 
    } 
    return objects; 
} 

@SuppressWarnings({ "unchecked" }) 
@Override 
public List<Object> sortPorfessors() { 
    RestTemplate restTemplate = new RestTemplate(); 
    List<Object> objects = restTemplate.getForObject(REST_SERVICE_URI 
      + "/sortProfs", List.class); 
    for (Object o : objects) { 
     System.out.println(o.toString()); 
    } 
    return objects; 
} 

@Override 
public Object findOne(Long id) { 
    Map<String, Long> profsMap = new HashMap<String, Long>(); 
    profsMap.put("id", id); 
    RestTemplate restTemplate = new RestTemplate(); 
    Object object = restTemplate.getForObject(REST_SERVICE_URI 
      + "/findProf/{id}", Object.class, profsMap); 
    System.out.println("Searching for user number....."+id); 
    return object; 
} 

@SuppressWarnings("unused") 
@Override 
public Object save(Object p) { 
    RestTemplate restTemplate = new RestTemplate(); 
    URI uri = restTemplate.postForLocation(REST_SERVICE_URI + "/saveProf",p, Object.class); 
    return p; 
} 
} 

我的问题是,我不知道如何发布的教授对象 RestTemplate为u可以在最后一个方法见。

如果您有任何建议家伙,谢谢分享。

回答

0

我想你的/saveProf端点可以接受JSONXML表示Professor。因此,您将在POST调用中发送JSONProfessor表示,然后save处理程序方法将使用其注册的HttpMessageConverter来读取您的HTTP消息正文,并填充Professor对象。

比方说,你会发送此JSON

{ 
    "name": "someone", 
    "degree": "PhD" 
} 

你应该写这样的事情在你的客户端:

// Prepare professor representation 
Map<String, Object> professor = new HashMap<>(); 
professor.put("name", "someone"); 
professor.put("degree", "PhD"); 

// Prepare request 
HttpHeaders headers = new HttpHeaders(); 
headers.add(HttpHeaders.CONTENT_TYPE, "application/json"); 
HttpEntity<Map<String, Object>> request = new HttpEntity<>(professor, headers); 

// Send prepared request 
ResponseEntity<String> response = template.postForEntity(REST_SERVICE_URI + "/saveProf", request, String.class); 
+0

我会尝试它现在。 – Roger

相关问题