我有一个对象.
public class MyObject
{
....
@Column(name = "a_number") @NotNull @NumberFormat(style = Style.NUMBER) @Min(1)
private Integer aNumber;
...
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我的对象被发布了@Valid注释.除了这个数字,我确实在类中的所有其他字段(它们的所有字符串)上进行验证.如果我从我的表单输入一个数字它工作正常,如果我违反了@Min(1)它也给了我正确的验证错误.但问题是,如果输入一个字符串而不是一个数字,它会抛出一个NumberFormatException.
我已经看过许多Integer和验证的例子,但如果你在发布的表单中输入一个字符串,则没有人会说明.我需要在其他位置进行验证吗?JavaScript的?我想要一个符合其余spring验证的解决方案,所以我可以在其他类中使用它.我只想说一个错误,声明它必须是数字.我也尝试使用@Pattern注释,但显然只是为了字符串.
建议?
我正在使用Spring 3才能上传文件.我想知道验证文件是否属于某种类型的最佳方法,特别是csv文件.我很确定检查扩展名是没用的,目前我正在检查上传文件的内容类型.我只是确保它是"text/csv"类型.而且只是为了澄清这是客户上传的文件,这意味着我无法控制其来源.
我很好奇Spring /浏览器如何确定内容类型是什么?这是确定上传了哪种文件的最佳/最安全的方法吗?我能100%肯定吗?
更新:我再也不知道如何确定文件的内容类型,以及如何确定内容类型.spring /浏览器如何根据上传的文件知道内容类型是"text/csv"?
我一直在搜索高低,以"优雅"的方式来做到这一点.使用Angular UI Sortable我目前有3列,基本上看起来像这个codepen,只有3列而不是2.查看sortOptions:
function createOptions (listName) {
var _listName = listName;
var options = {
placeholder: "app",
connectWith: ".apps-container",
activate: function() {
console.log("list " + _listName + ": activate");
},
beforeStop: function() {
console.log("list " + _listName + ": beforeStop");
},
change: function() {
console.log("list " + _listName + ": change");
},
create: function() {
console.log("list " + _listName + ": create");
},
deactivate: function() {
console.log("list " + _listName + ": deactivate");
},
out: function() …
Run Code Online (Sandbox Code Playgroud) 在过去的一年里,我将应用程序转换为使用Graphql.到目前为止它一直很棒,在转换过程中,我基本上移植了支持我的REST端点的所有服务,以支持grapqhl查询和突变.该应用程序运行良好,但我想继续发展我的对象图.
让我们考虑一下我有以下关系.
用户 - >团队 - >板 - >列表 - >卡 - >评论
我目前有两种不同的嵌套模式:用户 - >团队:
type User {
id: ID!
email: String!
role: String!
name: String!
resetPasswordToken: String
team: Team!
lastActiveAt: Date
}
type Team {
id: ID!
inviteToken: String!
owner: String!
name: String!
archived: Boolean!
members: [String]
}
Run Code Online (Sandbox Code Playgroud)
然后我有Boards - > Lists - > Cards - > Comments
type Board {
id: ID!
name: String!
teamId: String!
lists: [List]
createdAt: Date
updatedAt: Date
}
type List {
id: …
Run Code Online (Sandbox Code Playgroud) 我们有一个应用实质上可以准确地实现本指南:
https://www.apollographql.com/docs/apollo-server/features/subscriptions/
太好了 我们取得了巨大的成功,该应用程序也表现出色。
但是,我们开始遇到的是各种大型公司阻止其内部员工的Web套接字的情况。当我们尝试升级到Web套接字时,它们返回403。
我一直在四处搜寻,但对于非Web套接字订阅,在Apollo社区中没有看到太多东西。一切指南/文章/示例均基于Web套接字。
理想情况下,我会使用socket.io之类的方法,这种方法可以回溯到长时间轮询,这是我一直在考虑的解决方案。但是每个人都只使用subscriptions-transport-ws库(我们使用它)。我找到了一个过时的库,称为subscriptions-transport-sse,但犹豫要尝试它,而我的服务器设置将需要大量重构。我们使用nestjs和Apollo GraphQL模块。
还有其他人解决过如何回退到其他运输方式吗?我实际上是在尝试避免编写自己的脚本,但看起来是那样选择还是切换到内置了它的另一个框架?
谢谢。
第一个小背景信息.获得了相当标准的用户角色关系,其中用户可以拥有许多角色.我将角色定义为用户类中的一个集合.现在我知道html表单将所有值都作为字符串并尝试获取值,因为我的自定义Role对象不起作用.我实现了一个initbinder来将id转换回对象,这样我就可以从我的复选框中检索所选的值,该部分可以工作.
但我似乎无法回到另一个方向.我从已经拥有角色的数据库中检索用户,并希望预先填充用户拥有的所有角色的角色复选框.基于这个例子:
他们说:
form:checkboxes items ="$ {dynamic-list}"path ="property-to-store"
对于多个复选框,只要"path"或"property"值等于任何"复选框值 - $ {dynamic-list}",就会自动检查匹配的复选框.
我对它的解释是,我应该能够为它提供一组所有角色,并定义从User对象成为角色的路径,它应该匹配它们,从而导致复选框预先填充.
每个例子似乎都有动态列表的值作为String [].好吧,这很棒,但是这对于我们定义为Set的自定义对象有什么用?我仍然可以使用这一行定义的复选框,还是我还需要在视图中进行某种数据绑定?
这是我的用户dto,用户控制器,自定义表单活页夹和用户编辑页面.
用户DTO
@Entity
@Table
public class User extends BaseDto
{
@Column(updatable = false) @NotBlank
private String username;
@Column(name = "encrypted_password") @Size(min = 6, message = "password must be at least 6 characters") @Pattern(regexp = "^\\S*$", message = "invalid character detected")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column @NotNull
private boolean enabled;
@Column @Email @NotBlank
private …
Run Code Online (Sandbox Code Playgroud) 我已经搜索过这个网站,以获得使OpenEntityManagerInViewFilter工作的答案.我有一个标准的User对象,它引用一个具有多对多关系的角色对象作为集合.当我尝试从控制器编辑我的用户时,我得到了可怕的懒惰初始化异常.在大多数情况下,通过简单地将其添加到您的web.xml,这似乎是非常简单的:
<filter>
<filter-name>oemInViewFilter</filter-name>
<filter-class>
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>oemInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
现在我尝试过没有成功的事情(这些是来自网络的各种建议)
关于我读过的唯一一件对我有意义的事情就是因为我的持久层设置如何并且过滤器抓错了而我正在加载两个不同的会话.
继承我控制器中的方法,我从数据库中找到一个用户并导致延迟初始化异常,因为它没有从用户对象中检索角色.
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public String edit(@PathVariable final Integer id, final ModelMap modelMap)
{
final User user = userDao.find(id); ******This causes the lazy init exception
if (user != null)
{
modelMap.addAttribute("userInstance", user);
modelMap.addAttribute("validRoles", new HashSet<Role>(roleDao.findAll()));
return "/user/edit";
}
return "redirect:/user/list";
}
Run Code Online (Sandbox Code Playgroud)
这是我的相关设置:
web.xml中:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/board-servlet.xml *****This file references the file …
Run Code Online (Sandbox Code Playgroud) 不确定我是否可以这样做,但是,我说我有这个对象:
public class SomeObject
{
private String field1;
private String field2;
....
//Blah Blah getters and setters for all fields
}
Run Code Online (Sandbox Code Playgroud)
我想知道这些字段中有多少是非空的.我的特定对象有40个字段,所以我真的不想让if块分别检查40个字段中的每个字段.我以为我能以某种方式用反射做到这一点?但真的不知道我在做什么.只需遍历所有字段并检查其值即可.
对于那里的人来说,我觉得这不是一件容易的事.
这可能是一个"新问题",但无论如何它仍然存在.我们有一个netty服务器启动并运行,我们希望它支持多种不同的协议,如直接tcp,http,udp等.我正在尝试编写一个更动态的类,我们添加到管道上的处理程序/解码器/编码器每个请求所以我们只根据它的流量类型添加我们需要的层.我已经找到了直接的tcp,因为我们正在编码特殊的字节,但是我很难想出一个聪明的方法来判断它的HTTP流量与直接tcp是否基于ChannelBuffer或字节数组.
我的想法一直沿着阅读的一些字节读取并寻找像'GET'或'POST'这样的字符串,我假设HTTPRequest会在某个地方有这些项目..我正在努力做的是值得吗?或者任何人有任何有用的想法?
spring ×4
spring-mvc ×4
graphql ×2
java ×2
angularjs ×1
annotations ×1
apollo ×1
content-type ×1
grouping ×1
hibernate ×1
http ×1
javascript ×1
jquery-ui ×1
mime-types ×1
nestjs ×1
netty ×1
nio ×1
node.js ×1