我正在尝试验证有点分层的 DTO(formModel,无论您喜欢什么术语)(继承和依赖其他类)。
是否可以使以下模型配置工作:
public abstract class A {
@NotNull
private String fieldA1;
@NotNull
@Size(min = 2, max = 30)
private String fieldA2;
// ... and so on
}
public class B extends A {
@NotNull
private String fieldB1;
@NotNull
private Xyz fieldB2;
// and so on
}
public class Xyz {
@NotNull
private String fieldXyz1;
// etc..
}
Run Code Online (Sandbox Code Playgroud)
弹簧架控制器:
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity addCustomer(@RequestBody @Valid B customerDto, BindingResult bindingResult) {
// controller logic here
}
Run Code Online (Sandbox Code Playgroud)
问题是:只有似乎“有效”的约束注释是父类 A 上的那些。我提交了一个在 A …
我有一个 API 设计/版本控制难题。假设我有一个端点/api/customers可以获取所有客户(忽略分页)。但是有一个转折点:如果常规user访问此端点,他们只会获得该用户创建的客户,而没有其他人(我可以检查访问令牌和子字段以确定谁发送了请求)。其他用例:如果admin访问此端点,他们应该获得所有客户,无论是谁获得了他们。
现在我的问题是从 API 设计的角度来看:if/else在 API 控制器本身内进行角色检查以确定我是返回所有(管理员)客户还是特定(用户)客户,或者我应该区分用户的端点和行政?即所有客户的管理员只有端点/api/admin/customers,普通用户仍然可以访问他们的/api/customers?
我有一个在 AWS 上运行的 Spring Boot 应用程序。有时我会看到弹出一条日志,上面写着并提到 ThinkPHP?
java.lang.IllegalArgumentException: Invalid character found in the request target [/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21].
The valid characters are defined in RFC 7230 and RFC 3986.
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:491) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
Run Code Online (Sandbox Code Playgroud)
以及下面:
org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String ";"
at org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlacklistedUrls(StrictHttpFirewall.java:369) ~[spring-security-web-5.3.3.RELEASE.jar!/:5.3.3.RELEASE]
Run Code Online (Sandbox Code Playgroud)
这是令人担忧的原因还是正在发生的事情?通常根本没有流量发生 - 没有请求传入服务器,但这会弹出。
我读过这些关于使用自定义钩子来获取数据的博客文章,例如我们有一个自定义钩子执行 API 调用、设置数据、可能的错误以及旋转的 isFetching 布尔值:
export const useFetchTodos = () => {
const [data, setData] = useState();
const [isFetching, setIsFetching] = useState(false);
const [error, setError] = useState();
useEffect(() => {
setIsFetching(true);
axios.get('api/todos')
.then(response => setData(response.data)
.catch(error => setError(error.response.data)
.finally(() => setFetching(false);
}, []);
return {data, isFetching, error};
}
Run Code Online (Sandbox Code Playgroud)
然后,在组件的顶层,我们只需调用即可const { data, error, fetching } = useFetchTodos();,非常好,我们使用获取的所有待办事项来渲染我们的组件。
我不明白的是,我们如何根据组件的内部状态向钩子发送动态数据/参数,而不违反钩子规则?
例如,假设我们有useFetchTodoById(id)一个与上面的钩子定义方式相同的钩子,我们将如何传递它id?假设TodoList呈现 Todos 的组件如下:
export const TodoList = (props) => {
const [selectedTodo, setSelectedTodo] = useState(); …Run Code Online (Sandbox Code Playgroud) 我有一个 JBoss AS7 连接到 AWS,特别是通过适用于 Java 的 AWS SDK 连接到 S3,我拥有访问权限和密钥,一切都运行良好。我使用 S3 进行各种文件共享。
JBoss 的数据源连接到 AWS RDS。我已经为数据源启用了 SSL 加密 - 我rds-ca-2019-root.pem在standalone.xml 中配置了信任库,并且我的 RDS 数据源连接并验证了 SSL,没有任何问题。但是,当我尝试通过 SDK 连接到 S3 时(启用具有 RDS 证书的信任库时),出现以下异常:
Caused by: com.amazonaws.SdkClientException: Unable to execute HTTP request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
因此,没有启用信任库:我可以通过 SDK 很好地连接到 S3。当我使用 RDS 证书启用信任库时:我的 SDK -> S3 连接中断。
我不知道需要将什么证书添加到信任库中才能使 SDK 正常工作,或者我是否需要将 SDK 配置为以某种方式使用 TLS?
这是一个两部分问题:
It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time.告诉我,将来MIGHT有时会改变和/或取决于内存使用情况?举个例子:
for (int i = 0; i < 1000; i++) {
Set<String> stringSet = new HashSet<>();
stringSet.add("qwe");
stringSet.add("rtz");
stringSet.add("123");
stringSet.add("qwea");
stringSet.add("12334rasefasd");
stringSet.add("asdxasd");
stringSet.add("arfskt6734");
stringSet.add("123121");
stringSet.add("");
stringSet.add("qwr");
stringSet.add("rtzz");
stringSet.add("1234");
stringSet.add("qwes");
stringSet.add("1234rasefasd");
stringSet.add("asdxasdq");
stringSet.add("arfskt6743");
stringSet.add("123121 ");
stringSet.add(" ");
System.out.println(stringSet);
}
Run Code Online (Sandbox Code Playgroud)
无论我运行多少次,都会产生以下输出:
JDK 7: [, , 123, qwea, asdxasdq, qwe, qwr, 123121 , …
我有一个 Django 模型类,它扩展了django.contrib.auth.models.User:
class MyModel(models.Model):
user = models.OneToOneField(User, models.CASCADE, unique=True)
bio = models.TextField()
date_of_birth = models.DateField()
Run Code Online (Sandbox Code Playgroud)
在这个模型中,我正在制作一个 ModelForm:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['bio', 'date_of_birth']
Run Code Online (Sandbox Code Playgroud)
如何告诉 MyModelForm 接受用户的字段,例如username, first_name, last_name?
我可以添加类 Meta 字段中的示例,['bio', 'date_of_birth', 'user']但这只会为我提供下拉菜单,以选择 MyModelForm 中的 MyModel 与谁相关。
做['bio', 'date_of_birth', 'user.first_name']会抛出异常django.core.exceptions.FieldError: Unknown field(s) (user.first_name) specified for MyModel
编辑:这是回溯 https://pastebin.com/0T42VKEP
我已经做了一段时间的程序程序员,只是试图将我的思维方式转变为使用函数式编程(目前在 Python 3 中)。因此,我没有编写 for-each 循环,而是试图掌握map和list(map(..))
假设我有一个简单的for-in循环,它执行一些资源繁重的计算(print为了简单起见,我将在此处替换):
arr = [1,2,3,4]
for x in arr:
print(x)
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试执行以下操作时
map(lambda x: print(x), arr)
Run Code Online (Sandbox Code Playgroud)
什么也没发生,直到,我把它包装在一个列表中,它完成了我的超重print功能:
list(map(lambda x: print(x), arr))
Run Code Online (Sandbox Code Playgroud)
为什么?我错过了什么?我知道 map 返回一个迭代器,它应该节省内存,而不是立即保存整个列表。但是我的超重print功能什么时候会被触发呢?
java ×4
rest ×3
python ×2
spring ×2
api ×1
collections ×1
django ×1
hashset ×1
hateoas ×1
lambda ×1
react-hooks ×1
reactjs ×1
security ×1
ssl ×1
validation ×1