将spring请求体转换为对象列表

时间:2014-08-06 05:25:16

标签: java spring spring-mvc

我有一个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);
}

UPDATE 控制器代表服务架构后端代码,不一定要绑定到任何视图。

3 个答案:

答案 0 :(得分:0)

恕我直言,如果您有以下情况,Spring会自动执行:

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

如果您可以修改表单以获取此类字符串,则一切正常。

答案 1 :(得分: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>

答案 2 :(得分:-1)

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