我有点卡在这里。我正在尝试从 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 方法,并且有一个 Acceptapplication/xml header 。

postXML 应如下所示:

@RequestMapping(value = "/cace/postXML", method = RequestMethod.POST)
public @ResponseBody Result postXML(@RequestBody IntellexEvent intellexEvent) throws Exception

我注意到的另一件事是您需要使用 @XmlElement(name = "RuleName") 字段取消对 ruleName 的注释,否则标签最终将成为 <ruleName/>

10-08 04:53