Spring Rest JSON绑定

时间:2011-04-11 16:23:00

标签: java json spring rest jackson

我正在尝试使用Spring创建Restful服务。

方法通过参数接受“UserContext”对象,即@RequestBody。

客户端发送内容类型为“application / json”的JSON对象。但我收到错误“HTTP / 1.1 415不支持的媒体类型”。

..即使客户端发送一个空的“{}”JSON对象。

我的控制器:

@Controller
@RequestMapping(value = "/entityService")
class RestfulEntityService {

  @Resource
  private EntityService entityService;

  @ResponseBody
  @RequestMapping(value = "/getListOfEntities", method = RequestMethod.POST)
  public List<Entity> getListOfEntities(@RequestBody UserContext userContext) {
    System.out.println(userContext);
    return null;
  }
}

UserContext.java

public class UserContext {

    private Long userId;

    private String userName;

    private UserAddress userAddress;

    private CustomerInfo customerInfo;

}

申请背景:

  <bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"/>
  <bean id="xmlMessageConverter"
        class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    <constructor-arg ref="xstreamMarshaller"/>
    <property name="supportedMediaTypes" value="application/xml"/>
  </bean>

  <bean id="jsonHttpMessageConverter"
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json"/>
  </bean>

  <bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
      <util:list id="beanList">
        <ref bean="xmlMessageConverter" />
        <ref bean="jsonHttpMessageConverter"/>
      </util:list>
    </property>
  </bean>

  <mvc:annotation-driven/>

苦苦挣扎了一会儿。帮助将不胜感激!

3 个答案:

答案 0 :(得分:6)

根据我在mvc-showcase

上的messageconverter示例中看到的内容,在您Accept的请求中尝试使用application/json标头

这是一个相关的问题:use spring mvc3 @ResponseBody had 415 Unsupported Media Type why?

答案 1 :(得分:1)

这可能不是主要问题,但如果只有私有字段,则UserContext bean不会按原样运行。有多种方法可以解决这个问题;从公开字段到为每个字段添加@JsonProperty,或者只是更改jackson用于检测属性字段的最小可见性(@JsonAutoDetect注释)。

但是对于空JSON,这不应该给出问题;如果有问题,你应该看到不同类型的错误/异常(我假设)。

答案 2 :(得分:0)

确保您的类路径中有Jackson库。如果您正在使用maven,请在您的pom.xml上定义以下内容:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.7.5</version>
    <scope>compile</scope>
 </dependency>
 <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.7.5</version>
    <scope>compile</scope>
 </dependency>