java post rest json_java – POST JSON到Jersey REST服务的问题

JSON发布到Jersey REST服务时遇到问题 – GET工作正常,但POST看起来很棘手.我一直在研究这个问题,到目前为止还没有解决方案.任何帮助深表感谢!

它似乎无法找到U RL发送json?这是FireBug控制台显示的内容:

POST http://localhost:9998/data 400 Bad Request

Post source: name=Tony

**Response Headers**

Connection close

Content-Length 0

Content-Type text/html; charset=iso-8859-1

Date Fri, 20 Apr 2012 10:13:24 GMT

**Request Headers**

Accept application/json, text/javascript, */*; q=0.01

Accept-Encoding gzip, deflate

Accept-Language sv-se,sv;q=0.8,en-us;q=0.5,en;q=0.3

Connection keep-alive

Content-Length 9

Content-Type application/json; charset=UTF-8

Host localhost:9998

Referer http://localhost:9998/static/page.html

User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0

X-Requested-With XMLHttpRequest

我按照以下方式进行POST:

$('#btn').click(function(){

$.ajax({

url: '/data',

type: 'POST',

contentType: 'application/json',

data: {name:"Tony"},

dataType: 'json'

});

})

带有@XmlRootElement的Javabean类:

@XmlRootElement

public class StatusBean {

private String name;

public StatusBean() {

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

资源方法:

@Path("/data")

public class PostData {

@POST

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_JSON)

public StatusBean post(StatusBean sb) {

System.out.println(sb);

return sb;

}

}

服务器,与Grizzly一起设置:

public class Main {

public static final URI BASE_URI = getBaseURI();

public static void main(String[] args) throws IOException {

HttpServer httpServer = startServer();

Map initParams = new HashMap();

initParams.put("com.sun.jersey.config.property.packages", "server");

SelectorThread selector = GrizzlyWebContainerFactory.create("http://localhost:9998/", initParams );

System.out.println(String.format("Jersey app started with WADL available at "

+ "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...",

BASE_URI, BASE_URI));

System.in.read();

httpServer.stop();

}

protected static HttpServer startServer() throws IOException {

System.out.println("Starting grizzly...");

ClassNamesResourceConfig rc = new ClassNamesResourceConfig(PostData.class);

// rc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, true);

HttpServer server = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);

server.getServerConfiguration().addHttpHandler(new StaticHttpHandler(new File(".").getAbsolutePath()), "/static");

return server;

}

private static int getPort(int defaultPort) {

String port = System.getProperty("jersey.test.port");

if (null != port) {

try {

return Integer.parseInt(port);

} catch (NumberFormatException e) {

}

}

return defaultPort;

}

private static URI getBaseURI() {

return UriBuilder.fromUri("http://localhost/").port(getPort(9998)).build();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值