我正在尝试使用我在同一个本地 tomcat 实例上的 web 服务向 ehCache 发送一个 HTTP PUT(为了创建一个新的缓存并用我生成的 JSON 填充它)。
我是 RESTful Web 服务的新手,正在使用 JDK 1.6、Tomcat 7、ehCache 和 JSON。
我的 POJO 定义如下:
人 POJO:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Person {
private String firstName;
private String lastName;
private List<House> houses;
// Getters & Setters
}
房子 POJO:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class House {
private String address;
private String city;
private String state;
// Getters & Setters
}
使用 PersonUtil 类,我将 POJO 硬编码如下:
public class PersonUtil {
public static Person getPerson() {
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
List<House> houses = new ArrayList<House>();
House house = new House();
house.setAddress("1234 Elm Street");
house.setCity("Anytown");
house.setState("Maine");
houses.add(house);
person.setHouses(houses);
return person;
}
}
能够为每个 GET 请求创建 JSON 响应:
@Path("")
public class MyWebService{
@GET
@Produces(MediaType.APPLICATION_JSON)
public Person getPerson() {
return PersonUtil.getPerson();
}
}
将war部署到tomcat并将浏览器指向时
http://localhost:8080/personservice/
生成的 JSON:
{
"firstName" : "John",
"lastName" : "Doe",
"houses":
[
{
"address" : "1234 Elmstreet",
"city" : "Anytown",
"state" : "Maine"
}
]
}
到目前为止,一切都很好,但是,我有一个不同的应用程序在同一个 tomcat 实例上运行(并且支持 REST):
http://localhost:8080/ehcache/rest/
在 tomcat 运行时,我可以发出这样的 PUT:
echo "Hello World" | curl -S -T - http://localhost:8080/ehcache/rest/hello/1
当我像这样“获取”它时:
curl http://localhost:8080/ehcache/rest/hello/1
将产生:
你好世界
我需要做的是创建一个 POST 来放置我的整个 Person 生成的 JSON 并创建一个新的缓存:
http://localhost:8080/ehcache/rest/person
当我对这个以前的 URL 执行“GET”时,它应该是这样的:
{
"firstName" : "John",
"lastName" : "Doe",
"houses":
[
{
"address" : "1234 Elmstreet",
"city" : "Anytown",
"state" : "Maine"
}
]
}
所以,到目前为止,这就是我的 PUT 的样子:
@PUT
@Path("/ehcache/rest/person")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response createCache() {
ResponseBuilder response = Response.ok(PersonUtil.getPerson(), MediaType.APPLICATION_JSON);
return response.build();
}
问题):
- 这是编写 PUT 的正确方法吗?
- 我应该在
createCache()
方法中写什么让它将我生成的 JSON 放入http://localhost:8080/ehcache/rest/person
? - 使用 PUT 的命令行 CURL 注释会是什么样子?