У меня есть 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);
}
ОБНОВЛЕНИЕ Контроллер представляет собой код задней части архитектуры службы и не обязательно предназначен для привязки к любому представлению.
Вы можете использовать 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>
ИМХО, Весна сделала бы это автоматически, если бы у вас было:
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
Если вы можете изменить форму для получения такой строки, все будет работать нормально.
Попробуйте использовать API Jackson @RequestMapping(value="update", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public void update(@RequestBody List<Property> properties) {
//Do something with properties.
}