【问题标题】:How to send json object in browser url directly?如何直接在浏览器url中发送json对象?
【发布时间】:2015-04-27 03:44:32
【问题描述】:

我们的客户将根据我想要更新数据库的数据使用 servlet 上的 json 对象发送请求。

json 对象如下:

{"person":{"employment":{"id":"123","department":"developer","Company":"XYZ","sal":"10000"},"fName":"ABC","mName":"PQR","lName":"XYZ","email":"asd@asd.com","address":"mumbai west"}

我想通过直接在浏览器 url 上发送 json 对象来测试这个,它包含超过 256 个字符。

我试过了:-

https://integration.com/details/Notification?req={"person":{"employment":{"id":"123","department":"developer","Company":"XYZ","sal":"10000"},"fName":"ABC","mName":"PQR","lName":"XYZ","email":"asd@asd.com","address":"mumbai west"}

但它给了我以下例外:

org.codehaus.jackson.JsonParseException:意外字符('o'(代码 111)):需要一个有效值(数字、字符串、数组、对象、'true'、'false' 或 'null') 在 [来源:java.io.StringReader@3e3a5a9c;行:1,列:2] 在 org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433) 在 org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521) 在 org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442) 在 org.codehaus.jackson.impl.ReaderBasedParser._handleUnexpectedValue(ReaderBasedParser.java:1198) 在 org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:485) 在 org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2770) 在 org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2718) 在 org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863) 在 payment.EmaxCBNotification.doService(EmaxCBNotification.java:72) 在 payment.EmaxCBNotification.doGet(EmaxCBNotification.java:42) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 com.directi.pg.filters.ESAPITransactionFilter.doFilter(ESAPITransactionFilter.java:276) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 com.directi.pg.filters.UTF8Filter.doFilter(UTF8Filter.java:31) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(Thread.java:662)

请帮帮我!

我是否应该使用 HTTP POST 请求,它会在浏览器上以上述定义的格式访问 url?

【问题讨论】:

  • 这是他们正在进行的 RESTful API 调用吗?这些调用是否带有任何参数?
  • 在 URL 中使用超过 256 个字符?你用的是什么编码?
  • 亲爱的 ha9u63ar 网址未使用任何加密技术进行加密..

标签: java


【解决方案1】:

使用 GET 检索数据并使用 PUT 替换(更新)数据。永远不要使用 GET 来更新数据 - 永远不要!

Representational state transfer from en.wikipedia.org

【讨论】:

    【解决方案2】:

    如果您使用 POST 更新数据,可以使用 CURL 发布请求和测试

       curl -v -H "Content-Type: application/json" -X POST \
        -d '{"name":"your name","phonenumber":"111-111"}' 
       URL
    

    在这贴得很好 POST: sending a post request in a url itself

    【讨论】:

    • 亲爱的 Paul 感谢您的回复,我这样做是为了更新数据库。是的,调用带有参数。我在浏览器中发送该 json 对象时遇到问题。
    • 嗨 SRV - 那么您是在尝试让浏览器请求发送 JSON 消息正文吗?
    • 无法通过浏览器请求发送消息正文。可以发送请求参数。
    • 我可以使用如下所示的请求吗? https://integration.com/details/Notification?req={"person":{"employment":{"id":"123","department":"developer","Company":"XYZ","sal":"10000"},"fName":"ABC","mName":"PQR","lName":"XYZ","email":"asd@asd.com","address":"mumbai west"} 因为我想从 json 请求中读取值,这些值在 url 中。
    • 您可以对 json 正文进行 url 编码并尝试相同的请求。请记住,在这种情况下,您将值作为请求参数或查询参数传递。
    【解决方案3】:

    是的,您当然可以在 URL 查询字符串中传递 JSON。您只需先对 JSON 字符串进行 URLencode。正如@dmn 所说,由于 GET 的大小限制,数据可能最好通过 POST 传递。

    【讨论】:

    • 确实,永远不应该使用 GET 请求来更新数据。但是,我们可能会考虑在“搜索”请求的情况下需要在 GET URL 中包含 JSON,以将搜索条件作为 JSON 发送。但我想知道如何处理像 {"category":"green", "keyword":"\"hello\""} 这样的情况,因为一些浏览器和一些网络服务器(如 Tomcat)用斜杠替换反斜杠,和/或返回 400 错误请求。
    猜你喜欢
    • 2018-09-26
    • 2022-01-21
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2017-03-23
    • 2015-11-23
    相关资源
    最近更新 更多