2017-08-23 4 views
5

複数のRestControllerメソッドから返され、多くのフィールドを持つJavaクラス(MyResponse)があります。Spring MVC特定のコントローラメソッドのJsonプロパティを無視する

@RequestMapping(value = "offering", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> postOffering(...) {} 

@RequestMapping(value = "someOtherMethod", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> someOtherMethod(...) {} 

ただ1つのメソッドのプロパティの1つを無視したい(たとえばシリアル化しない)。

他のフィールドに影響を与える可能性があるため、クラスのnullフィールドを無視したくありません。

@JsonInclude(Include.NON_NULL) 
public class MyResponse { ... } 

JsonViewはよさそうだが、私の知る限り理解し、私は不器用なサウンドをどの無視したいものを除い@JsonViewでクラス内の他のすべてのフィールドに注釈を付けることがあります。 "reverse JsonView"のようなことをする方法があれば、それは素晴らしいことです。

コントローラメソッドのプロパティを無視する方法はありますか?

+1

あなたは@JsonIgnoreを使用できますが、それはすべての方法に適用されます。多分それをサブクラス化して無視しますか? –

答えて

1

小道具this男。

デフォルトでは(また、Spring起動時に)MapperFeature.DEFAULT_VIEW_INCLUSIONはJacksonで有効になっています。つまり、デフォルトですべてのフィールドが含まれます。

ただし、コントローラメソッドのビューとは異なるビューでフィールドに注釈を付けると、このフィールドは無視されます。

public class View { 
    public interface Default{} 
    public interface Ignore{} 
} 

@JsonView(View.Default.class) //this method will ignore fields that are not annotated with View.Default 
@RequestMapping(value = "offering", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> postOffering(...) {} 

//this method will serialize all fields 
@RequestMapping(value = "someOtherMethod", method=RequestMethod.POST) 
public ResponseEntity<MyResponse> someOtherMethod(...) {} 

public class MyResponse { 
    @JsonView(View.Ignore.class) 
    private String filed1; 
    private String field2; 
} 
関連する問題