2015-12-27 2 views
2

Я хотел бы проверить контроллер пружины ниже, который гласит http request attributes и действует на них. Я могу вызвать код контроллера ниже, набрав localhost:8080/someURL в свой веб-браузер. Но результат {"id":1,"content":"null and null and null"}, который указывает null значения в названии request attributes. Как отправить запрос на именованный URL-адрес, например localhost:8080/someURL, который содержит значения для указанного request attributes, так что я могу подтвердить, что код контроллера приемника работает правильно?Как добавить атрибуты к http-запросу контроллеру весны?

Вот код для контроллера:

import java.util.concurrent.atomic.AtomicLong; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestPa ram; 
import org.springframework.web.bind.annotation.ResponseBody; 

import javax.servlet.http.HttpServletRequest; 

@Controller 
public class SomeController { 

    private final AtomicLong counter = new AtomicLong(); 

    @RequestMapping(value = "/someURL", method=RequestMethod.GET) 
    public @ResponseBody Greeting receiveSMS(HttpServletRequest req){ 
     String att1 = (String) req.getAttribute("att1"); 
     String att2 = (String) req.getAttribute("att2"); 
     String att3 = (String) req.getAttribute("att3"); 
     String total = att1 + " and " + att2 + " and " + att3; 
     return new Greeting(counter.incrementAndGet(), String.format(total)); 
    } 

    } 

Примечание: Я пытаюсь воссоздать весной the PHP functionality that is given in the script at the following link. Я не написал этот код ниже, если я неправильно сформулирую этот вопрос, я был бы признателен за его пересмотр. Наряду со ссылкой на любое примерное решение, такое как JUNIT или другие средства, с помощью которых можно воссоздать запрос.

+0

Запрос никогда не будет содержать никаких атрибутов, если он исходит из браузера. Единственный способ, которым он может иметь атрибуты, - это если какой-либо другой ресурс помещает эти атрибуты в запрос и затем перенаправляется (или включается) в этот контроллер. Или, если раньше на них размещался какой-либо фильтр или перехватчик на сервере. –

+0

Итак, либо есть такой ресурс раньше, и вы должны протестировать этот ресурс или написать единичный тест, или есть такой ресурс, запрос должен поступать из браузера напрямую, а затем код некорректен. –

+0

@JBNizet Это URL-адрес, который будет помещен в веб-сервис от третьего лица. Вместо того, чтобы отвечать строкой 'total', я вместо этого передам три атрибута запроса в алгоритм. Было проще отправить их в качестве ответа для целей тестирования. Если вы говорите, что лучше 'SYSO'' total' string, я могу это сделать, но мне все равно нужно отправить запрос на url, содержащий именованные атрибуты. Как я могу это сделать? – CodeMed

ответ

1

Checkout Spring MVC Test framework - вместо того, чтобы вручную стрелять некоторые URL-модульных тестов вместо.

Относительно записную

Да, это параметры. В php у вас есть $ _GET и $ _POST или (если вам не нужен этот метод) просто $ _REQUEST для доступа к запросам параметров. Перекодируйте getAttribute() в getParameter() или поместите их в свою подпись метода, используя аннотацию @RequestParam.

@RequestMapping(value = "/receiveSMS", method=RequestMethod.GET) 
public @ResponseBody Greeting receiveSMS(@RequestParam("from") String from, 
     @RequestParam("to") String to, @RequestParam("body") String body){ 

} 

Теперь вы можете попробовать http://localhost:8080/yourapp/receiveSMS?from=me&to=you&body=stackoverflow

Sidenote:

Если вы хотите, чтобы Отсылка от клиента, вы должны использовать getParameter() вызовы вместо.

+0

Я добавил примечание к концу моего ОП, разъясняющего мой вопрос, основанный на комментариях. Помогает ли это вам определить решение? Раньше я не писал тестов JUNIT, но я могу легко добавить JUNIT в свой gradle.build, если вы можете предложить конкретный код, который выполнит то, что выполняет ссылка в ПРИМЕЧАНИЕ в конце моего OP. – CodeMed

+0

Это сделало. Спасибо и +1 за то, что нашли время, чтобы ответить быстро. – CodeMed

+0

Вышеупомянутые работы для GET, но он должен работать для POST. Если я изменю GET на POST в вашем коде ниже, как мне проверить почтовый запрос? Когда я использую url из браузера, в журнале отображается ошибка, указывающая, что запрашивается неподдерживаемый GET. – CodeMed

2

Атрибуты запроса - это только конструкции на стороне сервера. Попробуйте с помощью запроса параметров вместо:

@RequestMapping(value = "/someURL", method = RequestMethod.GET) 
public @ResponseBody Greeting receiveSMS(@RequestParam("att1") String att1, @RequestParam("att2") String att2, @RequestParam("att3") String att3){ 
    String total = String.format("%s and %s and %s", att1, att2, att3); 
    return new Greeting(counter.incrementAndGet(), total); 
} 

Затем отправить запрос вида:

http://localhost:8080/someURL?att1=value1&att2=value2&att3=value3 

И вы должны быть в состоянии прочитать значения, которые вы пытаетесь передать.

+0

Это URL-адрес, который будет помещен в веб-сервис от третьего лица. Вместо того, чтобы отвечать строкой 'total', я вместо этого передам три атрибута запроса в алгоритм. Было проще отправить их в качестве ответа для целей тестирования. Если вы говорите, что лучше 'SYSO'' total' string, я могу это сделать, но мне все равно нужно отправить запрос на url, содержащий именованные атрибуты. Как я могу это сделать? – CodeMed

+1

@CodeMed проблема не с выходом. Проблема в том, что атрибуты - это API-интерфейс сервлетов на стороне сервера. Они не являются частью протокола HTTP. Невозможно передавать атрибуты извне. Прочтите мои комментарии. –

+0

@CodeMed Точно, как говорит JB Nizet. Атрибуты не передаются клиентом. Но параметры и заголовки. Итак, выясните, что именно вы пытаетесь прочитать из запроса, и используйте соответствующий метод для чтения информации. – heenenee

-1

тест что-то вроде:

http://localhost:8080/someURL?att1=value1&att2=value2&att3=value3

Он покажет вам значение1, значение2 и Value3 передается в URL ...

+0

Нет, не будет. Вы вводите в заблуждение атрибуты с параметрами. –

+0

О! Бьен вю! Я не смущаюсь, но я немного устал ...: p Спасибо за указатель. – Jdaydai

Смежные вопросы