400对rest应用程序/xml的错误请求

400对rest应用程序/xml的错误请求,xml,rest,jersey,jax-rs,jersey-2.0,Xml,Rest,Jersey,Jax Rs,Jersey 2.0,我正在用jersey框架开发简单的rest Web服务。编写@POST方法,该方法使用并生成{MediaType.APPLICATION\ujson,MediaType.APPLICATION\uxml}。使用chrome Advance rest客户端调用web服务。Webservices正在按预期为下面的应用程序/json请求工作 {"noSave": "Save", "dateCre":"14/12/2014"} 但是对于下面的appliation/xml请求,收到了400个错误请求

我正在用jersey框架开发简单的rest Web服务。编写@POST方法,该方法使用并生成{
MediaType.APPLICATION\ujson,MediaType.APPLICATION\uxml
}。使用chrome Advance rest客户端调用web服务。Webservices正在按预期为下面的应用程序/json请求工作

{"noSave": "Save", "dateCre":"14/12/2014"} 
但是对于下面的appliation/xml请求,收到了400个错误请求

<?xml version="1.0" encoding="UTF-8">
<noSave>Save</noSave>
<dateCre>14/12/2014</dateCre>
响应对象:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyResponse", propOrder = {

})
public class MyResponse {

    @XmlElement(required = true)
    protected String resString;
    public String getResString() {
        return resString;
    }
    public void setResString(String value) {
        this.resString = value;
    }
}
rest Web服务:

import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/create")
public class CreateRequest {

    @POST
    @Produces({  MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML })
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Response createReq( @Valid Creation request)
    {
        System.out.println(" Request "+request.getNoSave());
        MyResponse result = new MyResponse();
        result.setResString(" Created with Number 123");
        return Response.ok(result).build();
    }
}
下面是我在chrome rest客户端中遇到的错误

Status 400 Bad Request. Loading time: 4250
Request headers User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like      Gecko) Chrome/39.0.2171.95 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/xml 
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Response headers Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=utf-8 
Content-Language: en 
Content-Length: 990 
Date: Tue, 13 Jan 2015 13:53:11 GMT 
Connection: close
我还尝试了下面的一段代码

@XmlRootElement(name="Creation")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Creation", propOrder = {

})
public class Creation {
和下面的xml请求。但是得到同样的错误

<?xml version="1.0" encoding="UTF-8">
<Creation>
    <noSave>NoSave</noSave>
    <dateCre>14/12/2014</dateCre>
</Creation>

诺瑟夫
14/12/2014
下面显示日志中的错误

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Creation"). Expected elements are <{http://check.com/rrs}Creation>
javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“创建”)。预期的要素是

它可能试图将您的请求解析为xml文档。有效的XML文档只能包含1个根节点

这个

<?xml version="1.0" encoding="UTF-8">
<noSave>Save</noSave>
<dateCre>14/12/2014</dateCre>
对于
MyResponse

@XmlRootElement(name = "MyResponse")
public class MyResponse {
使用XML,您将获得回报

<MyResponse>
    ...
</MyResponse>
尽管标题甚至不是必需的。简单地发送

<Creation>
    <noSave>sdfshd</noSave>
    <dateCre>3840389</dateCre>
</Creation>

sdfshd
3840389

我已经对此进行了测试,效果良好

显示错误详细信息。状态400错误请求显示解释加载时间:1013请求头用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/39.0.2171.95 Safari/537.36产地:Chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo 内容类型:application/xml-Accept:/Accept编码:gzip,deflate-Accept语言:en-GB,en-US;q=0.8,en;q=0.6响应头服务器:Apache Coyote/1.1内容类型:text/html;charset=utf-8内容语言:en内容长度:990日期:2015年1月13日星期二13:29:46 GMT连接:CloseOver是显示的错误消息。请参见并在此处包含错误消息。还请包括相关日志输出。在向创建对象添加@XmlRootElement注释后,给出了以下xml请求。但在2014年12月14日之前,我试过使用“?”并且没有标题,但收到了相同的问题400错误请求。仍然收到错误400错误请求。我已经用更改后的pojo更新了我的帖子。如果您的pojo为400,则很可能服务器中记录了异常。我们需要看到这一点。400可能意味着什么。我已经用上面的代码进行了测试,效果很好。我在服务器日志javax.xml.bind.UnmarshalException:unexpected元素(uri:,local:“Creation”)中收到此错误。您是否碰巧使用xjc编译器创建了JAXB类?如果没有,您是否有定义了
@XmlSchema
package info.java
文件?如果是这样,则xml需要名称空间。xml应该看起来像
是的,我用xjc编译器生成了对象。在xml中包含名称空间解决了这个问题。
@XmlRootElement(name = "MyResponse")
public class MyResponse {
<MyResponse>
    ...
</MyResponse>
<?xml version="1.0" encoding="UTF-8"?>   // See the `?`. You are missing that
<Creation>
    <noSave>sdfshd</noSave>
    <dateCre>3840389</dateCre>
</Creation>