Json 视图不限制响应中的字段

Json View doesn't restrict the fields in the response

我只需要在回复中发送 1 个带有 @JsonView 注释的字段(在我的例子中:eNumber)。此外,只有当调用来自也具有 JsonView 注释的 Controller1 时,才必须如此。 但是,当调用来自未使用 @JsonView 注释的 Controller2 时,也会发送 eNumber 字段值。我在这里错过了什么?

下面是我的代码:

DTO:

public class MyClass {

    @JsonView(Views.InternalRequest.class)
    public String getEnumber() {        
      
      return eNumber;
    }
    
    .... other fields
}

控制器 类 :

@RequestMapping("/api/ctr")
public class Controller1 {
    
    @GetMapping(value = "/{serviceId}/eva", produces = MediaType.APPLICATION_JSON_VALUE)
    @JsonView(Views.InternalRequest.class)
    public ResponseEntity<MyClass> findAllEva() {
    
        return ResponseEntity.ok(new MyClass());
    }
}

@RequestMapping("/api/abcd")
public class Controller2 {
    
    @GetMapping(value = "/{serviceId}/evss", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<MyClass> findAllEvs() {
    
        return ResponseEntity.ok(new MyClass());
    }
}

查看:

public class Views {
    public static class InternalRequest {
    }
}

我认为您需要执行以下操作:

  1. 定义两个视图;一个用于内部,一个用于 public.
  2. 注释字段而不是 getter(我相信,不是 100% 确定这一步)。
  3. 用“@JsonView(Views.Public.class)”注释 Controller2 方法

这是一个Baeldung article describing JsonViews