在两个不同的项目之间使用SpringTemplate进行POST

时间:2016-01-23 16:31:26

标签: spring web-services rest post resttemplate

我正在开发一个管理教授预订的应用程序,它应该在使用WebServices的其他项目中使用不同的功能。  我有一个RestController,我在Project Callled WSSpring和 这是它的代码。

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;
}
} 

我的问题是我不知道如何POST教授对象是 你可以在最后一个方法中看到RestTemplate。

如果您有任何建议的人,谢谢分享。

1 个答案:

答案 0 :(得分:0)

我认为您的/saveProf端点可以接受JSON的{​​{1}}或XML表示。因此,您将在Professor调用中发送JSON Professor代表,然后POST处理程序方法将使用其注册的{{1}读取您的HTTP消息正文填充save对象。

假设您要发送此HttpMessageConverter

Professor

你应该在你的客户端写这样的东西:

JSON