0

うまくいくはずなのにうまくいかないことに苦労しています...

私は私のコントローラにこのマッピングを持っています:

@RequestMapping(value = "/keys", method = RequestMethod.POST)
@Consumes(MediaType.APPLICATION_JSON)
public ResponseEntity<Void> parseKeyList(keyList keyList) {
  return new ResponseEntity<Void>(HttpStatus.OK);
}

シンプルなクラスで

@XmlRootElement
public class keyList {
  private String keys;
  public String getKeys() {
    return keys;
  }

  public void setKeys(String keys) {
    this.keys = keys;
  }
}

そして、この単純な JSON 投稿を送信しています。

{"keys": "This is my key list"}

しかし、私はnull入っていkeysます。

元のディスパッチャ サーブレットの要求どおり:

   <context:component-scan base-package="com.api" />
   <!-- <mvc:resources mapping="/*" location="/WEB-INF/pages/" /> -->
   <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>
4

1 に答える 1

1

You haven't attached your keyList param to the request body, change the method to:

@RequestMapping(value = "/keys", method = RequestMethod.POST)
@Consumes(MediaType.APPLICATION_JSON)
public ResponseEntity<Void> parseKeyList(@RequestBody keyList keyList) {
    return new ResponseEntity<Void>(HttpStatus.OK);
} 

Btw.: Class keyList should rather be KeyList (with big K).

Also there is (look at the chat) a

<mvc:annotation-driven/>

missing from your dispatcher-servlet.xml. That's the one that is registering the jackson mapper/marshaller.

于 2013-10-02T09:32:03.390 に答える