第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Spring Boot 上的基本放置(更新)

Spring Boot 上的基本放置(更新)

江戶川亂折騰 2021-09-29 17:07:25
我想要一些非?;镜臇|西。我只想更新用戶。前端為用戶發(fā)送一個(gè)json。 我想避免設(shè)置 currentUser 的每個(gè)值(它有 50 個(gè)字段)@PutMapping("user/{id}")public boolean updateUser(@PathVariable id, @RequestBody User user) {   User currentUser = userRepo.findOne(id);   // What now??}
查看完整描述

3 回答

?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

你需要做這樣的事情。請(qǐng)記住,這種方法有助于部分對(duì)象更新。這意味著如果您的對(duì)象(在 RequestBody 中)不包含某些字段(field==null),那么該字段將保持不變。


@PutMapping("user/{id}")

public boolean updateUser(@PathVariable id, @RequestBody User user) {

   User currentUser = userRepo.findOne(id);

   user = (User) PersistenceUtils.partialUpdate(currentUser, user);

   return userRepo.save(user);


}


public class PersistenceUtils {


    public static Object partialUpdate(Object dbObject, Object partialUpdateObject){

        String[] ignoredProperties = getNullPropertyNames(partialUpdateObject);

        BeanUtils.copyProperties(partialUpdateObject, dbObject, ignoredProperties);

        return dbObject;

    }


    private static String[] getNullPropertyNames(Object object) {

        final BeanWrapper wrappedSource = new BeanWrapperImpl(object);

        return Stream.of(wrappedSource.getPropertyDescriptors())

                .map(FeatureDescriptor::getName)

                .filter(propertyName -> wrappedSource.getPropertyValue(propertyName) == null)

                .toArray(String[]::new);

    }



}


查看完整回答
反對(duì) 回復(fù) 2021-09-29
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

你可以參考這個(gè)關(guān)于 PATCH vs PUT 的問題。


假設(shè)您只是在更改用戶的在線狀態(tài)。在這種情況下,最好使用 PATCH 并將更改反映在路徑變量上。


例如:


@PatchMapping("user/{id}/{status}")

public boolean setStatus(@PathVariable id, @PathVariable status) {

   User currentUser = userRepo.findOne(id);

   currentUser.setStatus(status);

   userRepo.save(currentUser);

   // ...

}

如果打算對(duì)未定義數(shù)量的字段進(jìn)行更改,您可以使用 PUT,在請(qǐng)求正文中包含數(shù)據(jù)并使用 DTO 模式。你可以在網(wǎng)上找到很多關(guān)于 DTO 模式的例子。在這種情況下,代碼如下。


@PatchMapping("user/{id}")

public boolean updateUser(@PathVariable id, @RequestBody UserDTO userDTO) {


   // UserMapper is the mapper class which returns you a new User

   // populated with the data provided in the data transfer object.

   User user = UserMapper.makeUser(userDTO);

   userRepo.update(id, user);

   // ...

}


查看完整回答
反對(duì) 回復(fù) 2021-09-29
  • 3 回答
  • 0 關(guān)注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)