簡體   English   中英

限制REST中的json參數

[英]restricting the json parameters in REST

我是剛開始使用Spring實現REST的人。 我創建了一個REST API,該API接受用於CRUD操作的user對象。 user實體具有映射到表的許多字段,例如created_timeupdated_time和我在POST方法中不期望的其他一些字段。 我只需要對象中的usernameage 如何以json形式接收和發送響應對象而獲得此信息。

@RestController
@RequestMapping (value = "/user" , produces = {"application/json"}, consumes = {"application/json"})
public class UserController{

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public User createUser(@RequestBody User user){
        User user = userService.createUser(user);
        return user;
    }

預期輸入{username" :"Ram", age:: 33}預期響應{id;;24, username" :"Ram", age:: 33}

首先,如果要創建成熟的REST API,則必須提及唯一且有意義的URL,並向其中添加適當的HTTP Verb。

如果您這樣編寫,它將被認為是更好的REST API處理程序:

    @RestController
    public class UserController{

        @Autowired
        private UserService userService;

        @RequestMapping(value = "/user/create", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
        public ResponseEntity<User> createUser(@RequestBody User user){
            HttpHeaders header = new HttpHeaders();
            header.add("Content-Type", "application/json");

            User user = userService.createUser(user);
            return new ResponseEntity<User>(user, header, HttpStatus.OK);
        }
    }

如果您使用Jackson進行JSON反序列化(只需將其包含在類路徑中),則可以輕松處理這種情況。 如果Jackson在JSON中找不到字段,它將使用默認值(例如null)初始化Java類字段。 因此,當從POST請求的正文中反序列化User時,它將設置usernameage並且id將為0或null。

如果然后只希望僅對序列化忽略User特定字段,則可以使用@JsonIgnore注釋相應的getter方法。

如果您想忽略大多數字段而只序列化少數幾個字段,則可以這樣配置ObjectMapper mapper

mapper.disable(MapperFeature.AUTO_DETECT_GETTERS);

並使用@JsonProperty注釋特定字段,例如

@JsonProperty
private static String username;

為單獨的域創建單獨的類。 如果您僅需要通過REST進行通信的用戶ID,名稱和年齡,請在REST軟件包中僅包含這些屬性的User類。 如果在服務的其他部分需要更復雜的對象,則可以使用另一個代表用戶的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM