Я использую модель для параметров запроса для вызова GET.
public class Model{
private Map<String, Object> myField;
public Map<String, Object> getMyField(){
return this.myfield;
}
public void setMyField(Map<String, Object> myField){
this.myField = myField;
}
}
И мой контроллер:
@RequestMapping(value = "/view",method= RequestMethod.GET,produces = {"application/json"})
@ResponseBody
public ResponseEntity<List<ViewResponse>> view(Model p_request) {}
Это запрос, который я нажимаю на http://localhost:8080/view?myField = {"states":"23"}. Я получаю плохой 400 плохой запрос, а также
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
Что я делаю неправильно?




От промежуточного класса Model можно избавиться, если в нем нет острой необходимости. Вы можете просто использовать Map для сопоставления всех параметров входного запроса, для этого вам нужно использовать аннотацию spring mvc @RequestParam, например
public ResponseEntity<List<Object>> view(@RequestParam Map p_request) {
}
и тогда вам не нужно отправлять цитируемый http-запрос, запрос станет:
http localhost:8080/view\?states=23
Поэтому мне в основном нужен параметр запроса типа фильтров, где я могу применять фильтры ко многим вещам. например: фильтры = {"состояния":[активный, неактивный], "имя":["ABXC", "PQR"]} Что касается модели, на самом деле существуют и другие параметры запроса. Это один из параметров запроса, ключ которого — myField, но само значение — это карта.
ok @sagarr, также вы можете использовать для вопроса: public ResponseEntity view(@RequestParam Map p_request) {} :)
Любая конкретная потребность, которую вам нужно передать только как json, я имею в виду, что вы можете использовать параметры req, разделенные запятыми, такие как states=a,b&name=x,y
Передайте объект как параметр запроса, а затем проанализируйте этот объект в своем контроллере.