小编Jin*_*won的帖子

JAX-RS Jersey客户端使用POJO MAPPING和Jackson封送JSON响应

我使用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)

java json jax-rs jersey jackson

5
推荐指数
1
解决办法
2万
查看次数

如何使用JAXB注释字符串列表?

说我有以下内容:

@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)

java xml annotations jaxb marshalling

5
推荐指数
1
解决办法
4625
查看次数

通用工厂方法惯例

让我说有一个抽象类看起来像

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

java generics

5
推荐指数
1
解决办法
136
查看次数

是否在没有警告的情况下转换泛型类型?

我有一个长话。

java泛型边界类型

泛型类型声明以进行反射

无论如何,我有一个使用反射调用方法并返回通用结果的方法。

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)

我发现我可以投中resultJAXBElement<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)

谢谢。

java generics reflection jaxb

5
推荐指数
1
解决办法
716
查看次数

具体类中的受保护构造函数与抽象类中的公共构造函数

此问题是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)

java api constructor protected abstract

5
推荐指数
1
解决办法
1584
查看次数

5
推荐指数
1
解决办法
149
查看次数

为什么@AssertTrue在@NotNull工作时不起作用?

我正在研究一个实体库.我在我的实体上添加了一些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)

java hibernate-validator bean-validation

5
推荐指数
1
解决办法
1484
查看次数

@PostRemove退出事务了吗?

我从规范中发现了以下信息。但是对于我不是英国人的我来说还不够清楚。

PostPersistPostRemove调用回调方法为一个实体的实体已变得持久或删除后。这些回调还将在这些操作所级联的所有实体上调用。该PostPersistPostRemove方法将在数据库中插入和删除分别操作之后被调用。这些数据库操作可以在调用持久,合并或删除操作之后直接发生,也可以在发生刷新操作之后立即发生(可能在事务结束时)。该PostPersist方法中提供了生成的主键值。

我的问题是,任何与交易相关的工作可以在之后回滚@PostRemove吗?

假设我的实体删除了一些离线文件 @PostRemove

class MyEntity {

    @PostRemove
    private void onPostRemove() {
        // delete offline files related to this entity
        // not restorable!
    }
}
Run Code Online (Sandbox Code Playgroud)

这些脱机文件是否有可能从存储中删除,而实体仍保留在数据库中?(通过回滚?)

lifecycle jpa

5
推荐指数
1
解决办法
848
查看次数

如何使用固定参数和可变参数创建流?

假设我们有以下方法。

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

5
推荐指数
1
解决办法
232
查看次数

CriteriaBuilder布尔比较

我现在正在这样做.

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.

jpa criteria criteria-api

4
推荐指数
1
解决办法
7427
查看次数