我正在尝试使用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/>
苦苦挣扎了一会儿。帮助将不胜感激!
答案 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>