Передача и получение строки Json в контроллер Spring

Я хочу передать и получить строку Json из контроллера. Я хочу вызвать контроллер, передав json String, а также хочу получить json String в контроллере. Есть какой-либо способ сделать это. У меня есть 2 значения в моем параметре URL: api = asdf23 && jsonstr = {"name": "myname", "age": "20"} Как я могу получить эти два параметра на контроллере

@RequestMapping(value = "/GetJSON", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody String GetJSON(
            HttpServletRequest request, HttpServletResponse response,
            @RequestParam(value = "api") String apiKey,
            @RequestParam(value = "jsonstr") String json)
            throws ParseException {
        System.out.println("JSON :: "+json);
        return json;
    }

Какая у вас проблема с вашим текущим кодом?

Arnaud 15.06.2018 09:08

Примечание: дальнейшие вхождения ошибок синтаксического анализа заголовка HTTP будут регистрироваться на уровне DEBUG. java.lang.IllegalArgumentException: в цели запроса обнаружен недопустимый символ. Допустимые символы определены в RFC 7230 и RFC 3986.

Rahul 15.06.2018 09:09

Обратите внимание, что &&, вероятно, должен быть &.

Arnaud 15.06.2018 09:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
1 777
5

Ответы 5

Создайте pojo, имеющее 2 свойства: имя и возраст.

public class Test{
private String name;
private Integer age;
//getter and setters
}

затем измените свой контроллер, чтобы он принимал json в запросе, и измените метод запроса на публикацию

@RequestMapping(value = "/GetJSON", method = RequestMethod.POST, produces = "application/json")

public @ResponseBody String GetJSON(
            HttpServletRequest request, HttpServletResponse response,
            @RequestParam(value = "api") String apiKey,
            @RequestBody Testjson testJson)
            throws ParseException {

Зачем менять ПОЛУЧАТЬ на ПОЧТА

dai 15.06.2018 09:14

если вы используете requestbody, тогда метод запроса должен быть опубликован

SpringLearner 15.06.2018 09:15

Спасибо. Как я могу вызвать этот контроллер с помощью URL? локальный: 8080 / sajan-spr-hib /… {"name": "myname", "age": "20‌"}

Rahul 15.06.2018 09:16

Для методов POSt вы не можете использовать URL-адрес браузера, для вызова URL-адреса публикации вы можете использовать POST MAN или написать код Java

SpringLearner 15.06.2018 09:17

@SpringLearner Вопрос в том, как метод GET принимает строковый аргумент json, и я не думаю, что его следует менять на публикацию

dai 15.06.2018 09:20

@RequestBody (value = "jsonstr") Test Testjson Получена ошибка при "значении"

Rahul 15.06.2018 09:23

Ошибка Soleved. Я меняю метод post на get. Но как мне вызвать этот почтовый контроллер из почтальона?

Rahul 15.06.2018 09:34

api = asdf23 ** && ** jsonstr = {"name": "myname", "age": "20"}

Вам нужен только один &

вы также можете использовать gson 2.2.2 jar

RequestMapping(value = "/GetJSON", method = RequestMethod.GET)
public @ResponseBody String GetJSON(
        HttpServletRequest request, HttpServletResponse response,
        @RequestParam(value = "api") String apiKey)
        throws ParseException {
      Gson gson=new Gson();

      Emp emp=new Emp();
        String  json =gson.tojson(emp);


    System.out.println("JSON :: "+json);
    return json;
}`

Я бы рекомендовал не использовать параметр URL для передачи всего объекта JSON, а использовать метод POST и поместить JSON в тело. Однако, если у вас есть причины использовать GET с json в качестве параметра url, воспользуйтесь этой ссылкой на кодировать Http URL должным образом.

В вашем случае ваш объект JSON будет выглядеть так: api%3Dasdf23%26jsonstr%3D%7B%22name%22%3A%22myname%22%2C%22age%22%3A%2220%22%7D

Передайте HTTP-запрос JSON

  1. используя тело как запрос POST.
  2. используя кодировку URL.

ниже только для примера:

jsonstr = {"name": "myname", "age": "20"} url: 80 / GetJSON? jsonstr =% 7B% 22name% 22% 3A% 22myname% 22% 2C% 22age% 22% 3A% 2220% 22% 7D

для получения дополнительной информации о кодировке URL см. ниже

Percent-encoding, also known as URL encoding, is a mechanism for encoding information in a Uniform Resource Identifier (URI) under certain circumstances. Although it is known as URL encoding it is, in fact, used more generally within the main Uniform Resource Identifier (URI) set, which includes both Uniform Resource Locator (URL) and Uniform Resource Name (URN). As such, it is also used in the preparation of data of the application/x-www-form-urlencoded media type, as is often used in the submission of HTML form data in HTTP requests.

https://en.wikipedia.org/wiki/Percent-encoding

Другие вопросы по теме