如何在GET请求查询参数中读取JSON

时间:2017-03-20 11:46:37

标签: java spring rest spring-mvc spring-boot

我必须使用GET请求的查询参数从URL中读取JSON值。 我在Spring Boot项目中使用最新的Tomcat。

       @RequestMapping(
            value = "/values",
            method = RequestMethod.GET, 
            headers = HttpHeaders.ACCEPT + "=" + MediaType.APPLICATION_JSON_VALUE,
            produces = "application/json")
       public ResponseEntity<String> myMethod(
            @RequestParam(value="key") String jsonRequestString) {
       //parse JSONString 
       //--
       }

GET请求到网址

网址: - http:// localhost:port/values?key={"org":"AA","points":[{"name":"xy","Measures":"343"}]}]

抛出 java.lang.IllegalArgumentException :在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

编辑: - 以原始形式发送JSON导致我无处可去,因此工作方法是以编码形式发送JSON。

4 个答案:

答案 0 :(得分:2)

你可以将关键参数编码为Base64格式并附加到url然后解码并在你的控制器方法中使用它。

关键的json文字 {“org”:“AA”,“points”:[{“name”:“xy”,“Measures”:“343”}}}]

基础64位编码文本 eyJvcmciOiJBQSIsInBvaW50cyI6W3sibmFtZSI6Inh5IiwiTWVhc3VyZXMiOiIzNDMifV19XQ ==

再次解码为json文本 { “组织”: “AA”, “点”:[{ “名称”: “XY”, “对策”: “343”}]}]

答案 1 :(得分:0)

您可以直接将String传递给JSONObject构造函数

有很多图书馆可用。

1。http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm(JSON jar)

2. http://www.java2s.com/Code/Jar/j/Downloadjsonsimple11jar.htm(简单JSON)

3. http://www.java2s.com/Code/Jar/g/Downloadgson224sourcesjar.htm(谷歌的GSON)

我个人使用JSON和GSON罐子。

JSONObject jsonObject = new JSONObject(variable)

答案 2 :(得分:0)

你应该照顾好几件事。

  1. 使用POST HTTP方法将JSON发布到服务器。
  2. 创建一个JAVA pojo类,它应该与您的JSON具有相同的结构。喜欢以下JSON,

      {
            "id": 123,
            "status": "Ordered",
            "product": "Pepsi"
           } 

  3. 我会创建一个类(你可以创建一个两个单独的类,因为你在json中有数组),

    公共类订单{

    private long id ;
    private String status; 
    private String product ;
    
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getProduct() {
        return product;
    }
    public void setProduct(String product) {
        this.product = product;
    } 
    

    }

    1. 然后,

         @RequestMapping(value = "/values", method = RequestMethod.POST,produces={"application/json"},
                  consumes={"application/json"})
          public ResponseEntity myMethod(
                      @RequestBody Order orderObj) {
          }
    2. 请参考此示例并构建解决方案。

答案 3 :(得分:0)

你可以尝试这样的事情

@GetMapping(value = "/values", produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> testMethod(@RequestParam("key") String key) throws Exception {
    JSONObject jsonObject = new JSONObject(key);
    //
}