15

ドメインクラスのプロパティを非表示にしようとしていますが、出力されたJSONに表示され続けます。Jackson2.0とSpring3.1.1を使用しています

/ users / 1の出力:

{"id":1,"password":null,"email":"someone@somewhere.com","firstName":"John","lastName":"Smith"}

私のドメインクラス:

@Entity
public class User {
    private String mPassword;
    ... 
    @JsonIgnore
    public String getPassword() {
        return mPassword;
    }

    public void setPassword(String password) {
        mPassword = password;
    }
    ...
}

私のspringmvc設定:

...
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="favorPathExtension" value="true" />
    <property name="mediaTypes">
        <map>
            <entry key="json" value="application/json"/>
        </map>
    </property>
    <property name="defaultContentType" value="application/json"/>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
        </list>
    </property>
</bean>
...

そして私のコントローラー:

@Controller
@RequestMapping("/users")
public class UserController {
    private UserService mUserService;

    public UserController(){}

    @Inject
    public void setUserController(UserService userService){
        mUserService=userService;
    }

    @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public void getUser(@PathVariable("id") long id, Model model){
        model.addAttribute(mUserService.getUser(id));
    }
}
4

5 に答える 5

11

Jackson2のサポートがSpring3.1.2に追加されました(Spring 3.2からバックポートされました-SPR-9507)。プロジェクトをSpring3.1.1からSpring3.1.2にアップグレードするだけで、Jackson2は既存の構成で動作します。

于 2012-07-15T21:17:47.717 に答える
10

問題は、SpringがJackson2.0で動作しないことです。これは次の方法で解決されました。

<bean id="jacksonMessageConverter"
          class="own.implementation.of.MappingJacksonHttpMessageConverter"/>

<bean class="org.springframework.web.servlet.mvc
             .annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jacksonMessageConverter"/>
            </list>
        </property>
        <property name="requireSession" value="false"/>
    </bean>

そして、own.implementation.of.MappingJacksonHttpMessageConverterはこれに基づいています:

http://www.jarvana.com/jarvana/view/org/springframework/spring-web/3.0.0.RELEASE/spring-web-3.0.0.RELEASE-sources.jar!/org/springframework/http/converter /json/MappingJacksonHttpMessageConverter.java?format=ok

ただし、Jackson1の代わりにJackson2.0のObjectMapperおよびその他のJacksonクラスを使用してください。*

于 2012-04-11T18:01:46.983 に答える
8

にアップグレードすることに加えてSpring 3.1.2、メッセージコンバータをに変更する必要もあります org.springframework.web.servlet.view.json.MappingJackson**2**HttpMessageConverter

于 2013-01-17T07:36:27.800 に答える
8

Spring 4バージョンを使用している場合は、次のことを行う必要があります。依存関係を更新します

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.3.3</version>
    </dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.3.3</version>
</dependency>

古いコードハウスアノテーションのインポートを次のように置き換えます。これを行わないと、JsonIgnorePropertiesなどの古いアノテーションが新しいバージョンのJacksonで機能しなくなります。

import com.fasterxml.jackson.annotation.*;

以下からmediaTypesを削除します。非推奨になりました。

ContentNegotiatingViewResolver

、不要、アクティベーションフレームワークjarから取得されます、Jacksonビューは使用する必要があります

MappingJackson2JsonView

<beans:property name="viewResolvers">
    <beans:list>
        <beans:bean
            class="org.springframework.web.servlet.view.BeanNameViewResolver" />
        <beans:bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <beans:property name="prefix" value="/WEB-INF/views/" />
            <beans:property name="suffix" value=".jsp" />
        </beans:bean>
        <beans:bean
            class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
            <beans:property name="viewClass"
                value="org.springframework.web.servlet.view.tiles3.TilesView"></beans:property>
            <beans:property name="order" value="0"></beans:property>
        </beans:bean>
    </beans:list>
</beans:property>
<beans:property name="defaultViews">
    <beans:list>
        <beans:bean
            class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
    </beans:list>
</beans:property>

于 2014-04-20T04:57:20.977 に答える
0

私の設定は次のようになります

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
  <property name="mediaTypes">
    <map>
      <entry key="html" value="text/html"/>
      <entry key="json" value="application/json"/>
    </map>
   </property>
  <property name="viewResolvers">
    <!-- this is not important for your jackson problem -->
    <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView" p:order="2" depends-on="tilesConfigurer"/>
  </property>
  <property name="defaultViews">
    <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
    </list>
  </property>
</bean>

私のコントローラーはこんな感じ

@Controller
public class SearchController {
   @RequestMapping(value="/search", method = {RequestMethod.GET, RequestMethod.POST})
   public SearchResponse search(@RequestParam(value = QUERY, required = true) String query) {
       return generateSearchResponse(query);
   }
}    

私のSearchResponseはより複雑な構造ですが、このタイプのオブジェクトが含まれています。

@JsonIgnoreProperties({ "popis" })
public class Kurz implements Serializable {
    private String nazev;
    private String popis;
}
于 2012-04-10T08:17:40.870 に答える