gibi etki alanı nesne sınıf var User
(bir JPA varlıktır):Bahar Denetleyici: Kullanım alanı nesneleri @RequestBody
@Entity
public class User {
private String name;
private boolean enabled = true;
// getters/setters
}
Ve istemcilerin yeni kullanıcılar oluşturmak için izin REST API sunuyor çalışıyorum Bahar 3 MVC kullanarak:
@Controller
public class UserController {
@RequestMapping(value="/user", method=RequestMethod.POST)
@ResponseBody
public String createRealm(@RequestBody User user) {
user.setEnabled(true); // client is not allowed to modify this field
userService.createUser(user);
...
}
}
Büyük çalışır, ancak için iyi bir fikir @RequestBody olarak etki nesneleri kullanmak olup olmadığını olmamalıdır bazı alanları korumak zorunda çünkü bilmiyorum doğrudan müşteri tarafından değiştirildi (Yani Bu durumda "etkin".
artıları/eksileri bu alternatiflerden nelerdir:
- Kullanım alanı nesneleri ve örnek boş veya tarafından varsayılan değerine bunları ayarlamak için (kullanıcı değiştirmesine izin verilmez alanları korumak el)
- Kullanım Auxiliar bir yeni bir dizi için) bu tür sadece ben REST API aracılığıyla açığa istediğiniz alanları içeren bir UserRequest gibi bir DTO), benzer (bir şey nesneleri ve yani Dozer ile (onları map etki alanı nesneleri.
ikinci alternatif şuna benzer: Kod tekrarını önler ve bakımı daha kolay olan başka bir yolu
@Entity
public class User {
private String name;
private boolean enabled = true;
// getters/setters
}
public class UserRequest {
private String name;
// enabled is removed
// getters/setters
}
@Controller
public class UserController {
@RequestMapping(value="/user", method=RequestMethod.POST)
@ResponseBody
public String createRealm(@RequestBody UserRequest userRequest) {
User user = ... // map UserRequest -> User
userService.createUser(user);
...
}
}
var mı?
Harika cevap Bozho, teşekkürler. Açıklamak istemediğiniz alanları (Baharın böyle bir şey sunmadığını düşünüyorum) ek açıklamalarda bulunmak için İzin verilmeyen bir ek açıklama oluşturma hakkında ne düşünüyorsunuz ve binder.setDisallowedFields (MyUtils.findDisallowedFields (User.class)) çağrısı yapın? İzin Verilen bir açıklama daha da güvenli olabilir. –
evet, makul geliyor. – Bozho
Üzgünüm, seni rahatsız ediyorum. Belki bir tür AOP noktası kullanmak için iyi bir yer olduğunu düşünüyor musunuz? –