Преобразование тела запроса пружины в список объектов

1

У меня есть HTTP-форма, которая возвращает следующий объект запроса HttpRequest следующим образом

propertyName0=name0&propertyValue0=value0&propertyDescription0=description0&
propertyName1=name1&propertyValue1=value1&propertyDescription1=description1&propertyName2=name2&propertyValue2=value2&propertyDescription1=description2

У меня есть модель, которая обладает следующими свойствами:

public class Property {

  private String propertyName;

  private String propertyValue;

  private String propertyDescription;

  // Getters and setters
}

Я хотел бы иметь возможность преобразовать переменные тела запроса в список объектов Property. Есть ли способ сделать это?

Мой код контроллера (предлагается)

@RequestMapping(value="update", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public void update(List<Property> properties) {
   // Do something with properties.
}

@RequestMapping(value="/fetch/}", method=RequestMethod.GET)
@ResponseBody
public String searchConfigProperties() throws Exception {
  List<Property> properties = // Some code that generates a list. model.
  Gson gson = new Gson();
  return gson.toJson(properties);
}

ОБНОВЛЕНИЕ Контроллер представляет собой код задней части архитектуры службы и не обязательно предназначен для привязки к любому представлению.

  • 0
    Вы можете использовать @ModelAttribute
  • 0
    Это кажется плохой идеей. Что содержится в вашей форме? Какая у вас модель домена?
Показать ещё 8 комментариев
Теги:
spring
spring-mvc

3 ответа

0

Вы можете использовать Jackson, используя jackson-mapper-asl и jackson-core-asl в своем классе, и используйте @ResponseBody как следует

@RequestMapping(value="fetch", method=RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public List<Property> searchConfigProperties() {
// Do something with properties.

 return properties;
}

обновленный

Вот зависимости

<dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.2</version>
        </dependency>
  • 0
    Как мне определить мою зависимость от Джексона? Можете ли вы уточнить?
  • 0
    @Kartik смотреть обновленный
0

ИМХО, Весна сделала бы это автоматически, если бы у вас было:

props[0].propertyName=name0&props[0].propertyValue=value0&props[0].propertyDescription=description0&
props[1].propertyName=name1&props[1].propertyValue=value1&props[1].propertyDescription=description1&props[2].propertyName=name2&props[2].propertyValue=value2&props[1].propertyDescription=description2

Если вы можете изменить форму для получения такой строки, все будет работать нормально.

  • 0
    Можете ли вы уточнить? Как бы я сделал что-то подобное?
  • 0
    @Kartik: Вы сказали, что у меня есть HTTP-форма, которая возвращает следующее тело запроса HttpRequest . Итак, я полагаю, у вас есть контроль над этой формой. Я смогу уточнить, если вы покажете эту форму.
Показать ещё 3 комментария
-2

Попробуйте использовать API Jackson
@RequestMapping(value="update", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public void update(@RequestBody List<Property> properties) {
//Do something with properties.
}

  • 0
    Можете ли вы уточнить? Как бы я сделал что-то подобное?
  • 0
    @Kartik смотри мой ответ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню