Как запросить источник и тело запроса в контроллере Spring

Я создаю REST API с использованием Java и Spring, и мне нужно обработать запрос POST в моем контроллере, но мне нужно извлечь тело из этого запроса, который является JSON, а также «источником» этого запроса,

@RequestMapping(value = "/create", method = RequestMethod.POST)
public XXX createMyObject(@RequestBody String data, YYY){
   MyObject mo = new MyObject();
   mo.setData = data;
   mo.setOrigin = yyy;

   myRepository.save(mo);
   return XXX;
}

У меня есть несколько вопросов: во-первых, как я могу получить источник этого запроса (который, я думаю, является URL-адресом, который перемещается в заголовке?), Есть ли для этого аннотация, аналогичная @RequestBody ?.

Мой второй вопрос заключается в том, что обычно является правильным объектом, который следует возвращать в таких методах публикации в качестве ответа.

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

Ответы 4

Вы должны иметь возможность получать заголовки и uris из объекта HttpServletRequest.

public XXX createMyObject(@RequestBody String data, HttpServletRequest request)

Что касается ответа, я бы сказал return String, который будет именем представления, которому вы можете передать некоторые атрибуты, говорящие, что операция была успешной или нет, или ModelAndView.

Ответ принят как подходящий

Чтобы ответить на ваши вопросы:

  1. Если вы включите HttpServletRequest в параметры вашего метода, вы сможете получить информацию о происхождении оттуда. например.

    public XXX createMyObject(@Requestbody String data, HttpServletRequest request) {
            String origin = request.getHeader(HttpHeaders.ORIGIN);
            //rest of code...
    

    }

  2. Для остальных ответов вам нужно будет вернуть представление объекта (json) или HttpStatus, чтобы уведомить клиентов, был ли вызов успешным или нет. например Return ResponseEntity<>(HttpStatus.ok);

Вы даже можете использовать константу HttpHeaders.ORIGIN.

membersound 07.10.2020 09:08

Попробуй это:

@RequestMapping(value = "/create", method = RequestMethod.POST)
public XXX createMyObject(HttpServletRequest request, @RequestBody String body) {
    String origin = URI.create(request.getRequestURL().toString()).getHost();
    System.out.println("Body: " + body + " Origin:" + origin);
    return XXX;
}

Разве URL-адрес запроса не отличается от заголовка HTTP origin? Один должен быть адресом отправителя запроса, другой - доменом веб-сайта, который инициирует запрос?

Snackoverflow 02.05.2020 16:35

@Autowired частный HttpServletRequest servletRequest;

Вы можете объявить объект запроса, а затем получить доступ к методу для получения Uri

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