
Alexander
17.08.2017
07:58:21
Vs?

Vyacheslav
17.08.2017
07:58:29

Alexander
17.08.2017
07:58:52
Вот так люди и становятся шарпистами
И в Канаду ты не поедешь

Google

Vyacheslav
17.08.2017
07:59:16
Чойта?

Alexander
17.08.2017
07:59:20
Принимай весло

Евгений
17.08.2017
07:59:24
слоган "делаем шарпистов через вижлу"

Vyacheslav
17.08.2017
07:59:59
Эх
Каждый джавист должен пройти через такое, чтобы понять, что у них всё не так уж и плохо

Alexander
17.08.2017
08:01:20
А вдруг понравится, и ты останешься?
Будешь рассказывать какой сишарп клевый
Как через линк круто работать с базой

Anton
17.08.2017
08:02:18

Vyacheslav
17.08.2017
08:04:57
Я себе 3-4 месяца даю, чтобы вкатиться
А там посмотрим

Sergey
17.08.2017
08:09:27

Alexander
17.08.2017
08:11:53

Google

Alexander
17.08.2017
08:12:10
Все, пропал джавист

Igor
17.08.2017
08:20:43

Wystan
17.08.2017
08:24:50
А кто-нибудь gatling c gitlab интегрировал?

Alexey
17.08.2017
08:24:59
Ну из тех кто реально пишет cncrc
если нет операций вставки в очереди, wait, sleep - тогда точно флаг
если есть блокировки, тогда уже без обработки Interrupted не обойтись

Pavel
17.08.2017
09:21:02

Arrow
17.08.2017
09:22:11

Евгений
17.08.2017
09:26:00
геттеры и сеттеры нужны для сокрытия данных и возможного расширения функционала при присвоении/чтении значения. вот пользуешься ты полями, а потом захочешь валидировать/изменять значение при установке. и усё ))) по всему проекту будешь лазить и заменять на метод


Arrow
17.08.2017
09:27:54
Так, в общем все вроде получилось, но не совсем. Вот смотрите я сделал такую обертку для всех возвращаемых значений (и из методов контроллеров и из обработчиков ошибок):
public class ResultView<T> {
public final String status;
public final T value;
public final List<Object> errors;
private ResultView(String status, T value, Stream<Object> errors) {
this.status = status;
this.value = value;
this.errors = errors.collect(Collectors.toList());
}
public static <T> ResultView<T> success(T result) {
return new ResultView<>("success", result, Stream.empty());
}
public static <T> ResultView<T> error(Stream<Object> errors) {
return new ResultView<>("error", null, errors);
}
public static <T> ResultView<T> error(Object error) {
return error(Stream.of(error));
}
}
public class ValidationErrorView {
public final String message;
public final String field;
public ValidationErrorView(String message, String field) {
this.message = message;
this.field = field;
}
}
И все бы хорошо, но когда я именно возвращаю ошибки валидации вот так:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResultView<Object> processValidationError(MethodArgumentNotValidException e) {
Stream<ValidationErrorView> errors = e.getBindingResult().getFieldErrors().stream().map(x -> new ValidationErrorView(x.getDefaultMessage(), x.getField()));
return error(errors);
}
То у меня на фронт приходит вот такой json:
{
"status": "error",
"value": null,
"errors": [
{
"parallel": false
}
]
}
Что это за parallel не подскажете? Очень странно... Для обычных строк и success работает нормально.


Ivan
17.08.2017
09:35:30
Так, в общем все вроде получилось, но не совсем. Вот смотрите я сделал такую обертку для всех возвращаемых значений (и из методов контроллеров и из обработчиков ошибок):
public class ResultView<T> {
public final String status;
public final T value;
public final List<Object> errors;
private ResultView(String status, T value, Stream<Object> errors) {
this.status = status;
this.value = value;
this.errors = errors.collect(Collectors.toList());
}
public static <T> ResultView<T> success(T result) {
return new ResultView<>("success", result, Stream.empty());
}
public static <T> ResultView<T> error(Stream<Object> errors) {
return new ResultView<>("error", null, errors);
}
public static <T> ResultView<T> error(Object error) {
return error(Stream.of(error));
}
}
public class ValidationErrorView {
public final String message;
public final String field;
public ValidationErrorView(String message, String field) {
this.message = message;
this.field = field;
}
}
И все бы хорошо, но когда я именно возвращаю ошибки валидации вот так:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResultView<Object> processValidationError(MethodArgumentNotValidException e) {
Stream<ValidationErrorView> errors = e.getBindingResult().getFieldErrors().stream().map(x -> new ValidationErrorView(x.getDefaultMessage(), x.getField()));
return error(errors);
}
То у меня на фронт приходит вот такой json:
{
"status": "error",
"value": null,
"errors": [
{
"parallel": false
}
]
}
Что это за parallel не подскажете? Очень странно... Для обычных строк и success работает нормально.
а зачем ты все в Stream оборачиваешь это фетиш такой
?


Arrow
17.08.2017
09:35:43
люблю их

Ivan
17.08.2017
09:37:09

Mikhail
17.08.2017
09:37:19
Кто-нибудь знает, можно ли настроить проект в idea так, чтобы project sdk менялся автоматически в зависимости от того какой javac.target в родительском поме. У нас сейчас переходный период, приходится периодически прыгать между бранчами с разными версиями джавы.

Arrow
17.08.2017
09:37:40
оказывается в метод error передается (судя по отладчику) не стрим, а что-то другое
странно

Ivan
17.08.2017
09:38:13
ReferencePipeline это и есть Stream

Arrow
17.08.2017
09:38:26

Google

S
17.08.2017
09:38:28

Ivan
17.08.2017
09:38:34
это ты тупишь а не он
сори

Arrow
17.08.2017
09:38:39
тогда хз

Ivan
17.08.2017
09:38:52
ты же юзаешь стримы потому что они рулят но разобраться как они работают наверно забыл

Arrow
17.08.2017
09:38:53

Ivan
17.08.2017
09:39:18
у стрима есть интерфейс там есть метод isParallel

Arrow
17.08.2017
09:40:27
смысл в том что стрим это просто оболочка для любой итерируемой коллекции которая не тратит лишней памяти
как-то так
плюс у стримов куча удобных методов типа того же map

Ivan
17.08.2017
09:41:15
в Java итерируемая коллекция это коллекция обладающая интерфейсом Iterable

Arrow
17.08.2017
09:41:24
это все ништяки из функционального программирования
я люблю фп))
ладно блин не суть, почему у меня так странно мапится результат? что за parallel? почему там нет полей с сообщениями как у меня во вьюхе определено?


Mikhail
17.08.2017
09:42:49
Так, в общем все вроде получилось, но не совсем. Вот смотрите я сделал такую обертку для всех возвращаемых значений (и из методов контроллеров и из обработчиков ошибок):
public class ResultView<T> {
public final String status;
public final T value;
public final List<Object> errors;
private ResultView(String status, T value, Stream<Object> errors) {
this.status = status;
this.value = value;
this.errors = errors.collect(Collectors.toList());
}
public static <T> ResultView<T> success(T result) {
return new ResultView<>("success", result, Stream.empty());
}
public static <T> ResultView<T> error(Stream<Object> errors) {
return new ResultView<>("error", null, errors);
}
public static <T> ResultView<T> error(Object error) {
return error(Stream.of(error));
}
}
public class ValidationErrorView {
public final String message;
public final String field;
public ValidationErrorView(String message, String field) {
this.message = message;
this.field = field;
}
}
И все бы хорошо, но когда я именно возвращаю ошибки валидации вот так:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResultView<Object> processValidationError(MethodArgumentNotValidException e) {
Stream<ValidationErrorView> errors = e.getBindingResult().getFieldErrors().stream().map(x -> new ValidationErrorView(x.getDefaultMessage(), x.getField()));
return error(errors);
}
То у меня на фронт приходит вот такой json:
{
"status": "error",
"value": null,
"errors": [
{
"parallel": false
}
]
}
Что это за parallel не подскажете? Очень странно... Для обычных строк и success работает нормально.
В BaseStream от которого Stream наследуется, есть метод isParallel, который говорит последовательный стрим у тебя или нет. Если ты маршаллер никак не тюнил, он наверняка это засунет в результат


Ivan
17.08.2017
09:42:52
потому что ты забыл прочитать книжку по Java/Spring/Jackson

S
17.08.2017
09:43:23

Mikhail
17.08.2017
09:43:27
А вообще, маршаллить что-то кроме обычных бинов, на мой скромный взгляд, очень дурно пахнет

Google

Ivan
17.08.2017
09:43:38
бинов или Iterable
т.е. один объект это T и второй это Iterable<T>

Arrow
17.08.2017
09:44:26
потому что ты забыл прочитать книжку по Java/Spring/Jackson
может ты просто скажешь в чем дело если знаешь?( за всю жизнь я не прочитал ни одной книги по программированию и не планирую, но C# например имхо я знаю в совершенстве, а java уже почти тоже, достаточно лишь постоянно разрабатывать на языке чтобы знать его, а что не понятно есть в гугле (как правило)

Admin
ERROR: S client not available

Del
17.08.2017
09:44:52
кек

Mikhail
17.08.2017
09:44:53
Тебе два раза уже сказали

S
17.08.2017
09:45:40
Такие вопросы лучше задавать в https://t.me/javastart

Maks
17.08.2017
09:45:57

Arrow
17.08.2017
09:46:03
Тебе два раза уже сказали
нет, я понял что parallel это поле стрима, но почему оно там??? у меня же маппится этот стрим в список моделек
this.errors = errors.collect(Collectors.toList());

Pavel
17.08.2017
09:46:18
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/tip/src/share/vm/oops/arrayKlass.cpp

Ivan
17.08.2017
09:46:19
здесь нужно базу иметь чтобы понимать как внутри все работает

Mikhail
17.08.2017
09:46:39
Ты маршаллишь объект стрим, маршаллеру пофиг что у тебя внутри

Ivan
17.08.2017
09:46:49
понимать кто маршалингом в спринге занимается по дефолту

Mikhail
17.08.2017
09:47:02
Он видит там поле которое воспринимает как поле обычного блина
И суёт его в результат
Либо разбирайся с конфигурацией маршаллера, чтобы он со стримами работал
Либо не выкобенивайся и возвращай iterable

Arrow
17.08.2017
09:48:28

Ivan
17.08.2017
09:48:48

Google

Mikhail
17.08.2017
09:48:52
Пожирнее?

Arrow
17.08.2017
09:49:42
щас не совсем понял...
ты о чем вообще

Mikhail
17.08.2017
09:50:11
Который json из объекта готовит
Там не гномики под капотом

Ivan
17.08.2017
09:50:23
вообще то это магический эльф

Nikitos
17.08.2017
09:50:31
сорь

Arrow
17.08.2017
09:50:42
ааа... хочешь сказать это не в стримах проблема, а в json?

Ivan
17.08.2017
09:51:03
не читал книги по прграммированию но спринг гавно

Sergey
17.08.2017
09:51:03
тебе хотят сказать что джексон не хочет есть стрим

Ivan
17.08.2017
09:51:04
у меня все
следующий вопрос что такое джексон =)

Sergey
17.08.2017
09:51:40
просто возвращай эррейлист

Arrow
17.08.2017
09:51:46