[英]restricting the json parameters in REST
我是剛開始使用Spring實現REST的人。 我創建了一個REST API,該API接受用於CRUD操作的user
對象。 user
實體具有映射到表的許多字段,例如created_time
, updated_time
和我在POST方法中不期望的其他一些字段。 我只需要對象中的username
和age
。 如何以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
時,它將設置username
和age
並且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.