我正在看到如何使用REST更新资源的一部分(例如状态指示器)的主题.
选项似乎是:
抱怨HTTP没有PATCH或MODIFY命令.但是,对于REST的HTTP MODIFY动词,接受的答案是什么?能很好地展示为什么这不像看起来那么好.
将POST与参数一起使用并识别方法(例如,名为"action"的参数).一些建议是使用自定义方法名称指定X-HTTP-Method-Override标头.这似乎导致了基于你正在尝试做的事情在实现中切换的丑陋,并且批评不是一种特别的REST方式来使用POST.事实上,采用这种方法开始感觉像RPC类型的接口.
使用PUT覆盖资源的子资源,该子资源表示要更新的特定属性.实际上,这实际上是对子资源的重写,这似乎符合PUT的精神.
在这一点上,我认为#3是最合理的选择.
这是最佳做法还是反模式?还有其他选择吗?
我试图使用JAXB来解组其模式由DTD定义的XML文件(呃!).
DTD的外部提供程序已将其中一个元素属性指定为xml:lang:
<!ATTLIST langSet
id ID #IMPLIED
xml:lang CDATA #REQUIRED
>
Run Code Online (Sandbox Code Playgroud)
这进入了xjc生成的类(标准生成;没有*.xjb魔术):
@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;
Run Code Online (Sandbox Code Playgroud)
但是,当使用JAXB解组有效的XML文件时,该xmlLang属性始终是null.
当我编辑XML文件,替换xml:lang用lang,改变了@XmlAttribute相匹配,解组是成功的(即属性是不可null).
我没有找到这个http://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.html.但是,解决方案是转换为XML Schema等.我强烈倾向于直接从未改变的DTD(因为它是外部提供并由ISO标准定义).
这是一个JAXB错误吗?我是否遗漏了属性名称中"命名空间"的内容?
FWIW,java -version="build 1.6.0_20-b02"和xjc -version="xjc version"JAXB 2.1.10 in JDK 6""