【发布时间】:2015-01-23 10:34:22
【问题描述】:
学习 REST 我偶然发现了子资源,我做了一些实验,但没有成功。这是代码,我使用的是 RESTeasy 3.0.9。
@Path(value="/user")
public interface UsersHttp {
@GET
@Produces(MediaType.APPLICATION_JSON)
public User[] getUsers();
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public User getUser(@PathParam("id") Long id);
...
}
这个接口是由这个会话bean实现的:
@Stateless
public class UsersHttpImpl implements UsersHttp {
@Inject
private UserPersistence persist;
@Inject
private MediaUtils mediaUtils;
@Override
public User[] getUsers() {
return persist.getUsers(null);
}
@Override
public User getUser(Long id) {
return persist.getUser(id);
}
...
}
这是User 类的sn-p:
@SuppressWarnings("serial")
@Entity
@Table(name = "usr_user")
@XmlRootElement
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "usr_id")
private Long id;
@Column(name = "usr_name", nullable = false)
private String name;
...
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Path("/name")
public String getName() {
return name;
}
...
}
我可以通过MyApplication/user/1 成功获得User,但是当我使用MyApplication/user/1/name 获得GET 时,我获得了javax.ws.rs.NotFoundException,我期待的是Alice。我错过了什么?
【问题讨论】:
-
您无法通过这种方式访问对象属性。实际上,没有与此 URI 关联的资源:@987654331@。您必须为
MyApplication/user/{id}/name创建另一个资源入口点并返回字符串。 -
您是否有在线资源可以引用您所说的“子资源”?可能是您偶然发现了一个简单易用的特定功能,而不是通用 JAX-RS API 功能。