Spring Data Rest PATCH禁止更新特定字段

时间:2017-08-11 12:46:04

标签: java spring mongodb rest

我目前正在使用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)请求进行自定义验证?我不喜欢这个解决方案,因为我必须为我的模型的每个实体都这样做。

我希望我能清楚地揭露我的问题,如果不清楚,请随时向我提出更多问题。

感谢您的帮助。

2 个答案:

答案 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()