我有REST服务,可以使用未编组的域实体进行响应。例如:
Request:
GET http://someAddress.com/customer/001
Response:
<customer>
<id>001</id>
<name>Some Guy</name>
...
</customer>
我想为发现服务的响应添加一些链接。例如:
<customer>
<id>001</id>
<name>Some Guy</name>
...
<link xml:link="delete" href="http://someAddress.com/customer/001"/>
</customer>
我担心的是,这是否会导致编组问题。我希望链接可被发现,但我希望消费者能够轻松使用域模式,其中不包含链接元素。
将回复链接放在其他地方是否更好?如果是这样,在哪里?
答案 0 :(得分:1)
假设您正在使用JAXB作为对象到XML层,您可以使用XmlAdapter执行以下操作,但是不需要String,您需要一个Link对象:
import java.net.HttpURLConnection;
import java.net.URL;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class CustomerAdapter extends XmlAdapter<String, Customer>{
private JAXBContext jaxbContext;
public CustomerAdapter() {
try {
jaxbContext = JAXBContext.newInstance(Customer.class);
} catch(JAXBException e) {
throw new RuntimeException(e);
}
}
@Override
public String marshal(Customer v) throws Exception {
if(null == v) {
return null;
}
return "http://someAddress.com/customer/" + v.getId();
}
@Override
public Customer unmarshal(String v) throws Exception {
if(null == v) {
return null;
}
URL url = new URL(v);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");
Customer customer = (Customer) jaxbContext.createUnmarshaller().unmarshal(connection.getInputStream());
connection.disconnect();
return product;
}
}
有关XmlAdapter的更多信息,请参阅:
答案 1 :(得分:0)
如果您确实不想更改模式以支持link元素,那么您可以使用链接标头。 http://tools.ietf.org/html/rfc5988