400 java web_关于json:Java中的RESTful Web服务 – 400错误的请求 – 错误的方法调用?...

本问题已经有最佳答案,请猛点这里访问。

我不明白为什么这个curl调用给了我一个400错误的请求。

curl -v -XGET -H"Content-Type:application/json" -d '{"match":{"first":"james"}}' http://localhost:8080/geocon/search/

认为这是应该处理所有事情的代码部分

@Path(Paths.SEARCH)

public class SearchService {

@GET

@Produces(MediaType.APPLICATION_JSON)

@Consumes(MediaType.APPLICATION_JSON)

public String search(@DefaultValue(NO_TYPE) @QueryParam("type") String type, String query) {

// do interesting stuff with the query

System.out.println(type);

System.out.println(query);

return //the result of the query

}

显然,我没有在控制台中看到两条打印线,而且Web服务的答案是400 Bad request

如果我在curl和代码中更改动词(POST而不是GET),结果就可以了,一切正常。

为什么?

我不能使用GET传递数据吗? 如果你考虑一下,我不会修改内容,我只是接收数据,所以GET应该是最好的REST翻译。

您可以发送带有GET请求的正文,但它不能有任何语义;它应该基本上被忽略。不这样做违反了HTTP / 1.1规范。我建议避免这种做法,因为没有人希望请求体具有GET请求。

现在我不确定你使用的MVC框架是否更严格,因为它会自动拒绝与正文发送的任何GET请求,因为通常服务器可以接受带有正文的GET请求,但是只是应该忽略它。

因此,你所做的不是RESTful。通过GET传递数据的唯一方法是通过查询参数。

UPDATE

这是对您的评论的回应。

您可以公开名为searchResult或search的显式资源。要创建searchResult或search资源实例,请传入一个本质上是查询的主体。如果您正在使用语义媒体类型(正如您应该使用正确的RESTful),则搜索结果资源可以具有媒体类型application/vnd.myservice.search-result+json,并且查询可以具有媒体类型application/vnd.myservice.search-query+json。然后,您可以POST对/searchResults的请求,该请求具有包含复杂查询的请求正文。响应的媒体类型为application/vnd.myservice.search-result+json,它可以包含搜索结果。

那怎么玩呢?搜索查询进来,您解析正文并运行查询。然后你应该坚持结果(不是永远;给它一些理智的TTL值)。完成后,返回带有Location标题的303 See Other,其中包含指向搜索结果的链接(可能类似于/searchResults/4334,其中4334是此特定结果的ID)。然后,客户端可以访问此URI以检索搜索结果。如果客户端请求已过期的搜索结果(即服务器因TTL已过期而将其清除),则服务器应以410 Gone响应。

另请阅读此内容以获取更多指示。

好吧但如果我想在我的Web服务中建立一个查询是JSON的研究函数,那么POST听起来并不真正RESTful。 你会建议通过查询参数传递整个JSON吗?

@BlacK你真的需要JSON来传递过滤条件吗? 除了匹配之外,你需要传递哪些字段? 否则我只会说?first=james。

@BlacK你可以简单地传入字段?firstName=james,例如。 但是,如果您想处理更复杂的查询,请查看此问题的一些解决方案。

问题是这个Web服务必须能够处理Elasticsearch查询。 Elasticsearch的强大之处在于您可以存储您的数据模式。 因此,如果我使用JSON符号,我将能够拥有良好的活力水平。

@BlacK查看我的编辑。

您使用的语法似乎有一个拼写错误。请尝试使用下面的json和xml格式。 -XGET错了。它应该是-X GET。

对于xml

curl -H"Accept: application/xml" -H"Content-Type: application/xml" -X GET http://hostname/resource

对于JSON

curl -i -H"Accept: application/json" -H"Content-Type: application/json" -X GET http://hostname/resource

-XGET应该有用。

-XGET肯定有效:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于调用 `xxljob` 的 RESTful 接口,您可以按照以下步骤进行操作: 1. 首先,需要确保 `xxljob` 已经正确安装和配置,并且服务已经启动运行。 2. 查询 `xxljob` 的接口文档,了解可用的接口和参数信息。一般而言,`xxljob` 提供了一系列用于任务管理和执行的接口。 3. 使用您喜欢的编程语言或框架,发起 HTTP 请求调用 `xxljob` 的接口。这可以通过使用标准库提供的方法、第三方库或工具来实现。 例如,使用 Python 的 `requests` 库可以发送 HTTP 请求,示例代码如下: ```python import requests url = "http://localhost:8080/xxl-job-admin/jobinfo/add" headers = { "Content-Type": "application/json" } data = { "jobGroup": 1, "executorRouteStrategy": "FIRST", "executorHandler": "demoJobHandler", "executorBlockStrategy": "SERIAL_EXECUTION", "jobDesc": "示例任务", "author": "C知道", "glueType": "BEAN", "glueRemark": "", "executorParam": "", "misfireStrategy": "DO_NOTHING", "cronGen_display": "0/5 * * * * ?", "childJobId": "", "executorTimeout": 0, "executorFailRetryCount": 0 } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: print("调用成功") else: print("调用失败") ``` 注意,上述示例的 URL、请求头、请求体数据和接口路径需要根据实际情况进行修改。 4. 根据响应结果进行相应的处理。正常情况下,`xxljob` 的接口会返回相应的执行结果或状态信息。 请确保在调用 `xxljob` 接口时,提供正确的参数和数据,并根据接口文档的要求进行调用。希望对您有所帮助!如果有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值