我目前正在使用spring-data-rest处理一个小型REST Web服务:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
我遵循了以下指南:https://spring.io/guides/gs/accessing-mongodb-data-rest/并且它的工作非常好。
我在Person.class上添加了一些注释,以便在POST请求期间验证对象(如@NonNull等),如下所示:
public class Person {
@Id
private String id;
@NonNull
private String firstName;
@NonNull
private String lastName;
private Integer age;
}
但现在我想做一个PATCH请求更新我的对象(通过做一个请求curl -X PATCH http://localhost:8080/people/598c2a80d8425fae64161cc4 -d&#39; {&#34; age&#34;:23}&# 39。)
它也工作正常,但我想阻止某些字段的更新,例如,不允许人们更新firstName和lastName。
有没有办法通过注释轻松完成?或者我是否必须为每个PATCH(或PUT)请求进行自定义验证?我不喜欢这个解决方案,因为我必须为我的模型的每个实体都这样做。
我希望我能清楚地揭露我的问题,如果不清楚,请随时向我提出更多问题。
感谢您的帮助。
答案 0 :(得分:0)
您可以使用:
@Column(updatable = false)
@NonNull
private String firstName;
这不会引发错误,但会避免更新字段。
答案 1 :(得分:0)
您可以覆盖特定的PATCH端点,并仅保留允许的字段
from scipy import stats
from pylab import *
from scipy.optimize import curve_fit
from scipy.integrate import*
from lmfit import Model, minimize
data=concatenate((normal(1,.2,5000),normal(2,.2,2500)))
y,x,_=hist(data,100,alpha=.3,label='data')
x=(x[1:]+x[:-1])/2
def gaussian1(x, amp1, cen1, wid1):
"1-d gaussian: gaussian(x, amp, cen, wid)"
return (amp1/(sqrt(2*pi)*wid1)) * exp(-(x-cen1)**2 /(2*wid1**2))
def gaussian2(x, amp2, cen2, wid2):
"1-d gaussian: gaussian(x, amp, cen, wid)"
return (amp2/(sqrt(2*pi)*wid2)) * exp(-(x-cen2)**2 /(2*wid2**2))
gmodel = Model(gaussian1) + Model(gaussian2)
#pars = gmodel.make_params( amp1=20,cen1=1.0,wid1=0.2,amp2=10,cen2=2.0,wid2=0.19)
pars = gmodel.make_params(amp1=260,cen1=1.0,wid1=0.2,amp2=140,cen2=2.0,wid2=0.19)
result = gmodel.fit(y, pars, x=x)
print(result.fit_report())
RecreatedVals = gaussian1(x, 122.899, 1.000,0.201)+gaussian2(x, 61.023, 1.999, 0.197)
#plt.plot(x, y, 'bo')
plt.plot(x, result.init_fit, 'k--',label='Initial Fit')
plt.plot(x, result.best_fit, 'r-',label='Best Fit')
plt.plot(x, RecreatedVals, 'g--', label="Back Calculated Values")
plt.show()