我正在尝试编写一个可以像这样处理json响应的结构类型
{"items":
[{"name": "thing",
"image_urls": {
"50x100": [{
"url": "http://site.com/images/1/50x100.jpg",
"width": 50,
"height": 100
}, {
"url": "http://site.com/images/2/50x100.jpg",
"width": 50,
"height": 100
}],
"200x300": [{
"url": "http://site.com/images/1/200x300.jpg",
"width": 200,
"height": 300
}],
"400x520": [{
"url": "http://site.com/images/1/400x520.jpg",
"width": 400,
"height": 520
}]
}
}
Run Code Online (Sandbox Code Playgroud)
因为每次键都不一样......不同的响应可能有更多或更少的键,不同的键,并且正如您所看到的,50x100返回特定大小的多个图像,如何创建与此匹配的结构?
我可以这样做:
type ImageURL struct {
Url string
Width, Height int
}
Run Code Online (Sandbox Code Playgroud)
对于单个项目,以及特定键的列表.但是包含结构看起来如何?
就像是:
type Images struct {
50x100 []ImageURL
...
}
type Items struct {
name string
Image_Urls []Images
}
Run Code Online (Sandbox Code Playgroud)
可能会工作,但我无法枚举所有可能的图像大小响应.此外,Image_Urls最后还没有真正的列表.如果可能的话,我希望能够将它直接转储到json.Unmarshal中.
我正在构建一个测试clojure/ring项目来了解它是如何工作的.我创建了一个名为"junkapp"的应用程序,它实际上只有一个处理程序
(defn handler [request]
{:status 200
:headers {"Content-type" "text/html"}
:body "Hello World"})
Run Code Online (Sandbox Code Playgroud)
还有一个调用静态内容的wrap-resource
(def app
(wrap-resource handler "public"))
Run Code Online (Sandbox Code Playgroud)
那么在我的project.clj中我引用了lein-ring并且还设置了:handler到我的junkapp.core/app
:plugins [[lein-ring "0.8.5"]]
:ring {:handler junkapp.core/app}
Run Code Online (Sandbox Code Playgroud)
当我用lein run运行它时,一切都按预期工作.调用/返回"Hello World"并调用/test.html将返回resources/public/test.html的内容.
但后来我尝试用它构建一个war文件
lein ring uberwar junkapp.war
Run Code Online (Sandbox Code Playgroud)
并将其放在tomcat7服务器的webapps/dir下.现在,当我去junkapp下的任何路径(so/junkapp /,/ junkapp/foo,/ junkapp/test.html)时,它总是返回"Hello World",我似乎无法让它完全引用静态内容.在谷歌上搜索我看到人们只是说要使用compojure.route/resources但是我正在学习我希望它能像这样工作,然后再加入更多的库.这里发生了什么?
我有一个Spring休息端点做一个简单的hello应用程序.它应该接受{"name":"something"}并返回"Hello,something".
我的控制器是:
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
@RequestMapping(value="/greeting", method=RequestMethod.POST)
public String greeting(Person person) {
return String.format(template, person.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
人:
public class Person {
private String name;
public Person() {
this.name = "World";
}
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
当我向服务提出请求时
curl -X POST -d '{"name": "something"}' http://localhost:8081/testapp/greeting
Run Code Online (Sandbox Code Playgroud)
我明白了
Hello, World!
Run Code Online (Sandbox Code Playgroud)
看起来它没有正确地将json反序列化为Person对象.它使用默认构造函数,然后不设置名称.我发现了这个:如何在REST中创建POST请求以接受JSON输入? …
我正在使用 Oracle 数据库,并且有一个包含 2 列数据的表,如下所示:
HASH | DATE
-----------------
abcd | 2017-11-01
abcd | 2017-11-02
abcd | 2017-11-03
wxyz | 2017-11-04
wxyz | 2017-11-05
abcd | 2017-11-06
wxyz | 2017-11-07
abcd | 2017-11-08
abcd | 2017-11-09
lmno | 2017-11-10
lmno | 2017-11-11
Run Code Online (Sandbox Code Playgroud)
我想知道每个哈希被看到的时间窗口。所以喜欢
hash | start | end
------------------------------
abcd | 2017-11-01 | 2017-11-03
wxyz | 2017-11-04 | 2017-11-05
abcd | 2017-11-06 | 2017-11-06
wxyz | 2017-11-07 | 2017-11-07
abcd | 2017-11-08 | 2017-11-09
lmno | 2017-11-10 | 2017-11-11
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的基本上是这样的: …
我有一个应用程序,其类型是
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
Run Code Online (Sandbox Code Playgroud)
但是我们有传统客户端将Age字段作为字符串或整数发送,所以......
{
"name": "Joe",
"age": "42"
}
Run Code Online (Sandbox Code Playgroud)
或者
{
"name": "Joe",
"age": 42
}
Run Code Online (Sandbox Code Playgroud)
我知道如果我想将“age”字段强制转换为整数,我可以用“,string”注释“age”字段,但如果该字段可以是其中之一怎么办?
我对 LDAP 几乎一无所知,对 spring 安全性更不了解,但我正在尝试配置一个 spring 启动应用程序以针对 ldap 实例进行身份验证,但我被卡住了。
我在 adldap.company.com 上获得了 ldap 服务器名称和 dc=ad,dc=company,dc=com 的基本 dn
我有一些 Python 代码可以进行简单的绑定并且可以工作。
LDAP_USERNAME = 'username@ad.company.com'
LDAP_PASSWORD = 'password'
base_dn = 'dc=ad,dc=company,dc=com' # not used for bind I guess, only search
try:
ldap_client = ldap.initialize('ldap://adldap.company.com')
ldap_client.set_option(ldap.OPT_REFERRALS,0)
ldap_client.simple_bind_s(LDAP_USERNAME, LDAP_PASSWORD)
except ldap.INVALID_CREDENTIALS as e:
ldap_client.unbind()
return 'Wrong username and password: %s' % e
except ldap.SERVER_DOWN:
return 'AD server not available'
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,它似乎成功绑定为“username@ad.company.com”和密码“password”。
我还有一个我认为应该处理身份验证的 WebSecurityConfig 类:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我有一对像
public class Obj1 {
public int id;
public String name;
public Obj2 obj2;
}
public class Obj2 {
public int id;
public String name;
public List<Obj1> obj1list;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够通过Jackson将其转换为Json。我找到了JsonManagedReference和JsonBackReference并为它们添加了注释,但是当您这样做时,序列化仅以一种方式起作用。仅当JsonManagedReference侧面的类被序列化时才显示。
如果我序列化一个“ Obj1”,我想查看附加到它的“ Obj2”。如果我序列化“ Obj2”,我想查看附加到它的“ Obj1”列表。
我也试过像这样使用JsonIdentityInfo批注
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
Run Code Online (Sandbox Code Playgroud)
除了将父对象的“ id”值添加到子对象(或列表案例中的每个子对象)之外,这似乎很有效,这有点奇怪。虽然我想我可以忍受。
有没有办法让它表现出我所期望的?