我使用Jersey客户端(1.11)并将JSONConfiguration.FEATURE_POJO_MAPPING设置为true时遇到了一些问题.我的测试代码如下所示:
MyFooCollectionWrapper<MyFooDTO> resp
= webResource.accept(MediaType.APPLICATION_JSON)
.get(new GenericType<MyFooCollectionWrapper<MyFooDTO>>() {});
Run Code Online (Sandbox Code Playgroud)
在服务器上:
1)我的web.xml将POJO Mapping设置为true.
2)MyFooDTO只是一个POJO,如下所示:
public class MyFooDTO {
private long id;
private String propA;
pubic long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
pubic String getPropA() {
return propA;
}
public void setPropA(String propA) {
this.propA = propA;
}
public MyFooDTO(MyFoo aFoo) {
this.id = aFoo.getId();
this.propA = aFoo.getPropA();
}
public MyFooDTO() {}
}
Run Code Online (Sandbox Code Playgroud)
3)MyFooCollectionWrapper看起来像这样:
public class MyFooCollectionWrapper<T> extends MyFooCollectionWrapperBase {
Collection<T> aCollection;
public MyFooCollectionWrapper() …Run Code Online (Sandbox Code Playgroud) 说我有以下内容:
@XmlRootElement(name = "foo1")
public class Foo1
{
@XmlElementWrapper( name="answerList" )
@XmlElement( name="answer" )
private List<String> answerList;
}
Run Code Online (Sandbox Code Playgroud)
如果Foo1实例被编组,它将看起来像这样
<foo1>
<answerList>
<answer>myAnswer1</answer>
<answer>myAnswer2</answer>
</answerList>
</foo1>
Run Code Online (Sandbox Code Playgroud)
现在,如果我有以下属性:
private List<List<String>> answerListsList;
Run Code Online (Sandbox Code Playgroud)
我如何注释上面的属性,所以我将有以下XML(当然,没有创建一个新类来保存字符串列表)?
<foo1>
<answerLists>
<answerList>
<answer>row1 myAnswer1</answer>
<answer>row1 myAnswer2</answer>
</answerList>
<answerList>
<answer>row2 myAnswerA</answer>
<answer>row2 myAnswerB</answer>
</answerList>
<anserLists>
</foo1>
Run Code Online (Sandbox Code Playgroud)
编辑:
不想创建新类的原因是我试图避免创建太多类.在我看来,为你可能拥有的每个字符串列表创建一个新类,它碰巧使用不同的元素名称,这不是一个好的设计.
我可以考虑创建一个新类作为答案,只要该类可以根据需要编组到不同的元素名称和元素包装器中.例如,该类应该能够表示以下XML:
<answerLists>
<answerList>
<answer>row1 myAnswer1</answer>
<answer>row1 myAnswer2</answer>
</answerList>
<answerList>
<answer>row2 myAnswerA</answer>
<answer>row2 myAnswerB</answer>
</answerList>
<anserLists>
Run Code Online (Sandbox Code Playgroud)
要么
<myLists>
<myList>
<item>row1 d1</item>
<item>row1 d2</item>
</myList>
<myList>
<item>row2 dA</item>
<item>row2 dB</item>
</myList>
</myLists>
Run Code Online (Sandbox Code Playgroud) 让我说有一个抽象类看起来像
abstract class Parent<V> {
protected static <T extends Parent<V>, V> T newInstance(
final Class<T> type, final V value) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
在以下Child类中
class Child extends Parent<XXX> {
public static Child newInstance1(final XXX value) {
// ...
}
public static Parent<XXX> newInstance2(final XXX value) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
哪个更好?newInstance1还是newInstancw2?
我有一个长话。
无论如何,我有一个使用反射调用方法并返回通用结果的方法。
public static <V> JAXBElement<V> unmarshal(..., Class<V> valueType);
Run Code Online (Sandbox Code Playgroud)
问题(?)是当我得到方法调用的结果时。我必须抛弃它。
final Object result = method.invoke(...);
Run Code Online (Sandbox Code Playgroud)
我发现我可以投中result成JAXBElement<V>这个样子。
final Object result = method.invoke(...);
Run Code Online (Sandbox Code Playgroud)
还有其他方法吗?我的意思是我Class<V> valueType可以使用了。
如果不是,以下陈述是否有点cumbersome?
@SuppressWarnings("unchecked")
final JAXBElement<V> result = (JAXBElement<V>) method.invoke(...);
return result;
Run Code Online (Sandbox Code Playgroud)
谢谢。
此问题是FilterInputStream / FilterOutputStream的空源的以下问题
这个问题可能与受保护vs公共构造函数的抽象类重复吗?有区别吗?(C#)
我发现FilterInputStream是这样设计的。
public class FilterInputStream extends InputStream { // concrete
protected FilterInputStream(InputStream in) { // protected
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果代码是
public abstract class FilterInputStream extends InputStream { // abstract
public FilterInputStream(InputStream in) { // public
// ...
}
}
Run Code Online (Sandbox Code Playgroud) 我刚刚发现FilterInputStream(InputStream)对FilterOutputStream(OutputStream)的protected那个(public)有一个不同的访问修饰符()
这有什么技术原因吗?
我正在研究一个实体库.我在我的实体上添加了一些bean验证注释.
我坚信在类路径上有一个bean验证实现.
@javax.validation.constraints.NotNull工作,@javax.validation.constraints.AssertTrue不起作用.
class MyEntity {
@AssertTrue // does't work
public boolean hey() {
return false;
}
@NotNull // works; violation while persist
private String some;
}
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么?
我使用org.hibernate:hibernate-validator和更改它org.apache.bval:bval-jsr没有任何区别.
UPDATE
实际上是调用该方法.我检查日志.
这是我的方法.
@AssertTrue(message = "a property must be eclusively system or owned")
private boolean execlusivelySystemOrOwned() {
logger.info("execlusivelySystemOrOwnded()");
final boolean result = system ^ (getOwner() != null);
logger.log(Level.INFO, "result: {0}", result);
return result;
}
Run Code Online (Sandbox Code Playgroud) 我从规范中发现了以下信息。但是对于我不是英国人的我来说还不够清楚。
在
PostPersist和PostRemove调用回调方法为一个实体的实体已变得持久或删除后。这些回调还将在这些操作所级联的所有实体上调用。该PostPersist和PostRemove方法将在数据库中插入和删除分别操作之后被调用。这些数据库操作可以在调用持久,合并或删除操作之后直接发生,也可以在发生刷新操作之后立即发生(可能在事务结束时)。该PostPersist方法中提供了生成的主键值。
我的问题是,任何与交易相关的工作可以在之后回滚@PostRemove吗?
假设我的实体删除了一些离线文件 @PostRemove
class MyEntity {
@PostRemove
private void onPostRemove() {
// delete offline files related to this entity
// not restorable!
}
}
Run Code Online (Sandbox Code Playgroud)
这些脱机文件是否有可能从存储中删除,而实体仍保留在数据库中?(通过回滚?)
假设我们有以下方法。
void some(int id, int... otherIds) {
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能用IntStream这两个参数创建一个单一的?
IntStream.concat(
IntStream.of(id),
Optional.ofNullable(otherIds)
.map(IntStream::of)
.orElseGet(IntStream::empty)
);
Run Code Online (Sandbox Code Playgroud)
看起来很冗长。我们有什么简洁的惯用语吗?
java concatenation variadic-functions java-stream option-type
我现在正在这样做.
final CriteriaBuilder builder = ...;
final boolean flag = ...;
if (flag) {
builder.isTrue(expression);
} else {
builder.isFalse(expression);
}
Run Code Online (Sandbox Code Playgroud)
我能这样用吗?
builder.equals(expression, flag);
Run Code Online (Sandbox Code Playgroud)
这尝试不会有任何问题吗?对表达式或其他东西说null.
java ×8
generics ×2
jaxb ×2
jpa ×2
abstract ×1
annotations ×1
api ×1
constructor ×1
criteria ×1
criteria-api ×1
io ×1
jackson ×1
java-stream ×1
jax-rs ×1
jersey ×1
json ×1
lifecycle ×1
marshalling ×1
option-type ×1
protected ×1
reflection ×1
xml ×1