QBit POST方法无法解析明文

时间:2016-03-24 16:46:06

标签: java rest curl

我正在使用Qbit编写一个简单的REST应用程序,并且无法正确解析POST文本。这几乎是straight out of a tutorial,所以我不确定我可能缺少什么

SimpleService.java中的

@RequestMapping(value = "/body/string", method = RequestMethod.POST)
public boolean bodyPostString(String body) {
    return body.equals("foo");
}

...

public static void main(final String... args) {

        final ServiceEndpointServer serviceServer = EndpointServerBuilder
            .endpointServerBuilder()
            .setUri("/")
            .build();
    serviceServer.initServices(
            new SimpleService());
    serviceServer.startServer();

在终端

 curl -X POST -H "Content-Type: text/plain" -d 'foo' http://localhost:8080/service/body/string

响应

["Unable to JSON parse body :: false not parsed properly\n\nThe current character read is 'f' with an int value of 102\nfalse not parsed properly\nline number 1\nindex number 0\nfoo\n^"]

1 个答案:

答案 0 :(得分:0)

这可能是我正在使用的QBit版本(0.9.3)的问题,但是我能够通过将我的POST主体包装在JSON中并使用advantageous boon解析它来解决该问题(我假设)所有JSON都由QBit处理。

在一个新类中,SimpleJSONWrapper:

import java.util.Map;

public class SimpleJSONWrapper {

    public final String payload;

    public SimpleJSONWrapper(final String payload) {
        this.payload = payload;
     }

    public String getPayload() {
        return payload;
    }
}

并且原始的bodyPostString方法变为:

@RequestMapping(value = "/body/string", method = RequestMethod.POST)
public boolean bodyPostString(SimpleJSONWrapper body) {
    return body.getPayload().equals("foo");
}

现在将您的请求发送为:

curl -X POST -H "Content-Type: text/plain" -d '{\"payload\":\"foo\"}' http://localhost:8080/service/body/string

请注意,如果您将嵌套的JSON作为有效负载,则需要SimpleJSONWrapper来存储Map<String, Object>,而不是String