1

jackson-Module-Hibernate を使用できるように、Spring3.1 で Jackson2.0.0 を使用しようとしています。ここで説明されている手順に従いましたhttp://blog.pastelstudios.com/2012/03/12/spring-3-1-hibernate-4-jackson-module-hibernate/。これはすべて正常に機能しているように見えますが、JSON ビューを使用して JSON にビュー内のフィールドのみが含まれるようにすると、機能しません。

アクティブなビューは常に null です。ビューをアクティブにするにはどうすればよいですか? 私は運がないので、今日一日試してみました...どんな助けでも大歓迎です。前もって感謝します。

以下は関連コードです。

マッパーはこちら

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;

public class HibernateAwareObjectMapper extends ObjectMapper {

public HibernateAwareObjectMapper() {
    Hibernate4Module hm = new Hibernate4Module();
    registerModule(hm);  
    hm.configure(Hibernate4Module.Feature.FORCE_LAZY_LOADING, true);
}

}

ビュークラスはこちら

public class DiffViews {
 public static class Public { }

}

ビューを使用するPOJOは次のとおりです

 @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
 @JsonIgnoreProperties(ignoreUnknown=true)
 @Entity
 public class Premium implements java.io.Serializable {

@JsonView(DiffViews.Public.class)
private String sequence;
@JsonView(DiffViews.Public.class)

@Column(name = "SEQUENCE", nullable = false, length = 4)
public String getSequence() {
    return this.sequence;
}

public void setSequence(String sequence) {
    this.sequence = sequence;
}

@Column(name = "NAME", nullable = false)
public String getName() {
    return this.name;
}

public void setName(String name) {
    this.name = name;
}

)

私の春のコントローラーで

@RequestMapping("/cartonPremium")
public void listAll(
        @RequestParam("page") int page, @RequestParam("rows") int maxResults, 
        @RequestParam("sidx") String sortKey, @RequestParam("sord") String sortOrder, HttpServletResponse response) {

    HibernateAwareObjectMapper mapper = new HibernateAwareObjectMapper();
    mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    mapper.enable(SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS);
    mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION );

    JqgridResponse<Premium> gridResponse = new JqgridResponse<Premium>();
    gridResponse.setRows(premiumList);
    gridResponse.setRecords(""+premiumList.size());
    gridResponse.setTotal(""+premiumList.size());
    gridResponse.setPage(""+page);      

    try {
        ObjectWriter objWriter= mapper.writerWithView(DiffViews.Public.class);
        Class<?> xxx = mapper.getSerializationConfig().getActiveView();
        objWriter.writeValue(response.getOutputStream(), gridResponse);
        //mapper.writerWithView(DiffViews.Public.class).writeValue(response.getOutputStream(), gridResponse);
    } catch (JsonGenerationException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

私の春の設定

    <mvc:annotation-driven>
    <mvc:message-converters>    
        <bean class="com.creata.json.MappingJackson2HttpMessageConverter">        
            <property name="objectMapper">            
                <bean class="com.creata.json.HibernateAwareObjectMapper" />        
            </property>    
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
4

1 に答える 1

1

やっとエラーが見つかりました... JqgridResponse というラッパーでドメイン POJO を返していましたが、このラッパー クラスのフィールドに @JsonView 注釈を追加していませんでした。したがって、jsonビューは無視されません。

于 2012-10-14T23:39:41.997 に答える