Spring Rest JSON Binding - PullRequest
       8

Spring Rest JSON Binding

3 голосов
/ 11 апреля 2011

Я пытаюсь создать Restful-сервис с помощью Spring.

Метод принимает объект "UserContext" через аргумент, т.е. @RequestBody.

Клиент отправляет объект JSON с типом содержимого "application / json". Но я получаю сообщение об ошибке «HTTP / 1.1 415 Unsupported Media Type».

.. даже когда клиент отправляет нулевой объект "{}" 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 ]

6 голосов
/ 13 апреля 2011

Попробуйте с Accept заголовком в вашем запросе application/json, основываясь на том, что я вижу с примерами конвертера сообщений на mvc-showcase

Это связанный вопрос: использовать пружину mvc3 @ResponseBody имел 415 неподдерживаемых типов носителей, почему?

1 голос
/ 12 апреля 2011

Вероятно, это не главная проблема, но ваш компонент UserContext не будет работать как есть, если он имеет только закрытые поля.Есть несколько способов решить эту проблему;от обнародования полей до добавления @JsonProperty для каждого или просто изменения минимальной видимости, которую Джексон использует для обнаружения полей свойств (аннотация @JsonAutoDetect).

Но с пустым JSON это не должно создавать проблем;и если возникла проблема, вы должны увидеть другой тип ошибки / исключения (я полагаю).

0 голосов
/ 12 апреля 2011

Убедитесь, что в вашем пути к классам есть библиотеки Джексона. Если вы используете 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...