我有点卡在这里。我正在尝试从 firefox 的海报发布一小段 XML。
<IntellexEvent>
<RuleName>a rule name</RuleName>
</IntellexEvent>
很简单,现在我的
IntellexEvent
类是@XmlRootElement(name = "IntellexEvent")
public class IntellexEvent {
// @XmlElement(name = "RuleName")
private String RuleName;
public String getRuleName()
{
return RuleName;
}
public void setRuleName(String RuleName)
{
this.RuleName = RuleName;
}
}
我的 Controller 是...
@Controller
@RequestMapping("/cace/**")
public class CaceController
{
@Autowired
IUserService userService;
public CaceController()
{
}
@RequestMapping(value = "/cace/postXML", method = RequestMethod.POST)
public Result postXML(@RequestBody String intellexEvent) throws Exception
{
String temp = intellexEvent;
Result result = new Result();
result.setStatusCode(200);
result.setSuccess(true);
return result;
}
}
——编辑——
所以在这里我将@RequestBody 作为字符串。我想要的是将它自动编码到 IntellexEvent .... 作为一个字符串,我可以在 POST 上命中我的后端,当我将字符串更改为 IntellexEvent 时,我收到 415 错误。
我只是希望能够访问我的后端,我已经尝试过 GET,并且我打得很好,(我没有将它们包含在我的 Controller 中)我在这里错过了什么?在 spring-mvc-servlet.xml 中,我定义了 jaxb2 编码器。如果您需要更多信息,请询问,在此先感谢各位!
最佳答案
您可能缺少 Content-Type
header ,它应该是 application/xml
,这是为了让 Spring-MVC 知道您正在发布一个 xml。此外,如果您希望响应是 xml,那么您已经使用 @ResponseBody
注释了 postXML 方法,并且有一个 Accept
的 application/xml
header 。
postXML 应如下所示:
@RequestMapping(value = "/cace/postXML", method = RequestMethod.POST)
public @ResponseBody Result postXML(@RequestBody IntellexEvent intellexEvent) throws Exception
我注意到的另一件事是您需要使用
@XmlElement(name = "RuleName")
字段取消对 ruleName
的注释,否则标签最终将成为 <ruleName/>