4

我的 POST 设置标题 主要 POST 设置

我有点卡在这里。我正在尝试从 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

@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;
    }

}

--EDITED -- 所以在这里我将@RequestBody 作为字符串。我想要的是让它自动编组为 IntellexEvent.... 作为一个字符串,我能够在 POST 上访问我的后端,当我将字符串更改为 IntellexEvent 时,我得到一个 415 错误。

我只是希望能够访问我的后端,我已经尝试过 GET,而且我打得很好,(我没有将它们包含在我的控制器中)我在这里缺少什么?在 spring-mvc-servlet.xml 中,我定义了 jaxb2 marshaller。如果您需要更多信息,请询问,在此先感谢大家!

4

1 回答 1

1

您可能缺少Content-Type标题,应该是application/xml,这是为了让 Spring-MVC 知道您正在发布一个 xml。此外,如果您希望响应是 xml,则您已使用 .xml 注释您的 postXML 方法并@ResponseBody具有.Acceptapplication/xml

postXML 应如下所示:

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

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

于 2012-10-19T18:55:40.830 回答