我正在开发一个管理教授预订的应用程序,它应该在使用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。
如果您有任何建议的人,谢谢分享。
答案 0 :(得分:0)
我认为您的/saveProf
端点可以接受JSON
的{{1}}或XML
表示。因此,您将在Professor
调用中发送JSON
Professor
代表,然后POST
处理程序方法将使用其注册的{{1}读取您的HTTP消息正文填充save
对象。
假设您要发送此HttpMessageConverter
:
Professor
你应该在你的客户端写这样的东西:
JSON