Java Jackson@JsonIgnoreType无法处理静态内部类

Java Jackson@JsonIgnoreType无法处理静态内部类,java,json,spring,jackson,Java,Json,Spring,Jackson,我有几个使用builder模式的模型对象,我正试图通过springmvc与Jackson进行序列化。问题是,我不希望内部静态生成器类与外部类一起序列化。我曾尝试在各个getter方法上使用@JsonIgnore,但最终得到的是一个空对象。我还尝试在内部类本身上使用@JsonIgnoreType,但似乎没有任何效果。有人知道如何让Jackson忽略一个静态的内部类吗?提前谢谢 使用Spring 3.2.2和Jackson 2.2.1 带生成器的简单类 public final class Addr

我有几个使用builder模式的模型对象,我正试图通过springmvc与Jackson进行序列化。问题是,我不希望内部静态生成器类与外部类一起序列化。我曾尝试在各个getter方法上使用@JsonIgnore,但最终得到的是一个空对象。我还尝试在内部类本身上使用@JsonIgnoreType,但似乎没有任何效果。有人知道如何让Jackson忽略一个静态的内部类吗?提前谢谢

使用Spring 3.2.2和Jackson 2.2.1

带生成器的简单类

public final class Address {
  private final String street;
  private final String city;
  private final String state;

  private Address(Address.Builder addressBuilder) {
    street = addressBuilder.street;
    city = addressBuilder.city;
    state = addressBuilder.state;
  }

  public static Address.Builder newBuilder() {
    return new Address.Builder();
  }

  @JsonIgnoreType // has no effect
  public static final class Builder {
    private String street;
    private String city;
    private String state;

    private Builder() {}

    public Builder street(String street) {
      this.street = street;
      return this;
    }

    ...

    // Java Beans setters/getters used by Spring

    public void setStreet(String street) {
      this.street = street;
    }

    public String getStreet() {
      return street;
    }

    ...

    public Address build() {
      return new Address(this);
    }
  }
  ...
}
SpringXML配置

<bean id="jacksonObjectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    <property name="failOnEmptyBeans" value="false" />
    <property name="simpleDateFormat" value="MM/dd/yyyy" />
</bean>
...
<bean id="contentNegotiatingViewResolver" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="3">
    <property name="defaultViews">
        <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" p:objectMapper-ref="jacksonObjectMapper" p:extractValueFromSingleKeyModel="true" />
    </property>
</bean>
预期结果

{"builder":{"street":"1234 Some street"},"address":{"street":"1234 Some street","city":"Some City","state":"Some State"}}
{"street":"1234 Some street","city":"Some City","state":"Some State"}
@Controller
@Validated
@RequestMapping("/address")
public class AddressController extends AbstractController {
  @Resource private AddressService addressService;

  @RequestMapping("/clean")
  public Address cleanAddress(@Validated({AddressGroup.Domestic.class}) Address.Builder address) {
    return addressService.cleanAddress(address.build());
  }
}
这是用于返回地址对象的Spring控制器

{"builder":{"street":"1234 Some street"},"address":{"street":"1234 Some street","city":"Some City","state":"Some State"}}
{"street":"1234 Some street","city":"Some City","state":"Some State"}
@Controller
@Validated
@RequestMapping("/address")
public class AddressController extends AbstractController {
  @Resource private AddressService addressService;

  @RequestMapping("/clean")
  public Address cleanAddress(@Validated({AddressGroup.Domestic.class}) Address.Builder address) {
    return addressService.cleanAddress(address.build());
  }
}

您的控制器处理程序方法中缺少
@ResponseBody

能否显示将对象传递给jackson进行序列化的代码?我已经添加了示例控制器code缺少@ResponseBody?看起来这解决了问题。我认为视图解析器中的
p:extractValueFromSingleKeyModel=“true”
属性也会有同样的效果。但我想我错了。非常感谢你。尽管如此,您会发现@JsonIgnoreType也会解决这个问题。