我正在使用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^"]
答案 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